每个键包含多个数据元素的链接列表

时间:2013-07-24 08:46:01

标签: c++ linked-list elements

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

1 个答案:

答案 0 :(得分:1)

将事件 - &gt;功能的映射存储在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将为er.first->second将为函数处理程序。