C++ 每个键具有多个数据元素的链表

C++ 每个键具有多个数据元素的链表,c++,linked-list,elements,C++,Linked List,Elements,我正在创建一个输入管理器,它存储事件,以及在事件发生时调用的相关方法(std::function)。但是,在触发事件时,可能需要调用多个事件。存储事件-函数配对的明显方式是链表,但由于可能有多个函数,这将不起作用。我正在考虑使用一个链表,它将std::function数组存储为元素。这是一种合适的方法吗?如果不是,最安全的方法是什么?将事件->函数的映射存储在一个多映射中,该多映射可以存储具有重复键的键/值组合 std::multimap<Event, std::function<v

我正在创建一个输入管理器,它存储事件,以及在事件发生时调用的相关方法(
std::function
)。但是,在触发事件时,可能需要调用多个事件。存储事件-函数配对的明显方式是
链表
,但由于可能有多个函数,这将不起作用。我正在考虑使用一个
链表
,它将
std::function
数组存储为元素。这是一种合适的方法吗?如果不是,最安全的方法是什么?

将事件->函数的映射存储在一个
多映射中,该多映射可以存储具有重复键的键/值组合

std::multimap<Event, std::function<void()>> events_;

equal_range
返回一对迭代器,因此在这两个迭代器之间循环。在循环的每次迭代中,迭代器(r.first)指向一个键/值对
r.first->first
将是
e
r.first->second
将是函数处理程序。

如果它存储事件和函数,为什么不创建映射?对于多个函数,一个多重映射。@chris谢谢,听起来像我想要的。我不太了解C++中预先构造了什么数据结构,所以这是一个很大的帮助!汉迪尔,@chris再次感谢你。书签。谢谢,完全回答了这个问题,谢谢你告诉我如何获取所有事件处理程序。
void on_event(Event const &e) {
  for (auto r = events_.equal_range(e); r.first != r.second; ++r.first)
    r.first->second();
}