链表,每个键包含多个数据元素
Linked list with multiple data elements per key
我正在创建一个输入管理器,用于存储事件和关联的方法(std::function<void()>
(,以便在事件发生时调用。但是,触发事件时可能会调用多个事件。存储事件的明显方式 - 函数配对将是一个linked list
,但由于可能有多个函数,这将不起作用。我正在考虑只有一个linked list
,它将std::function<void()>
数组存储为元素。这是一种合适的方法吗?如果不是,什么是最安全的方法?
将事件>函数的映射存储在一个multimap
中,该可以存储具有重复键的键/值组合。
std::multimap<Event, std::function<void()>> events_;
触发事件时,可以使用 equal_range
找到所有事件处理程序的列表,该列表返回所有事件处理函数的迭代器std::pair
。调用这些中的每一个来处理事件,例如(未经测试的代码(
void on_event(Event const &e) {
for (auto r = events_.equal_range(e); r.first != r.second; ++r.first)
r.first->second();
}
equal_range
返回一对迭代器,因此在两者之间循环。在循环的每次迭代中,迭代器 (r.first( 指向一个键/值对。 r.first->first
将被e
,r.first->second
将是函数处理程序。
相关文章:
- 为什么复制而不是移动数据元素?
- 设计将引用元素移动到开头的数据结构.C++
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 如何为结构的数据元素赋值
- C++ Expat 仅打印元素的第一个字母和标签中的数据
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 从自定义数据类型向量中删除重复元素
- C++ - 按自定义数据类型向量的值删除元素
- Getter 函数,用于在 2d 数组是类的数据成员时检索 2d 数组元素
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- 用于查找元素的数据结构
- C++ 数据结构队列:使用 for 循环查找队列中最大的元素
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 派生类中的数据元素
- 如何比较和存储 2 个向量的数据元素位置
- 如何在c++中处理大数据元素
- 链表,每个键包含多个数据元素
- 模板链表获取复杂数据类型的数据元素