【问题标题】:Linked list with multiple data elements per key每个键具有多个数据元素的链表
【发布时间】:2013-07-24 08:46:00
【问题描述】:

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

【问题讨论】:

  • 如果它存储事件和函数,为什么不存储地图?对于多个功能,multimap。
  • @chris 谢谢,听起来像我想要的。我对 C++ 中预置了哪些数据结构了解不多,所以这是一个很大的帮助!
  • @chris 再次感谢。已收藏。

标签: c++ linked-list elements


【解决方案1】:

将 Event->Function 的映射存储在 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-&gt;first 将是 er.first-&gt;second 将是函数处理程序。

【讨论】:

  • 谢谢您,完全回答了这个问题,并感谢您向我展示了如何获取所有事件处理程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 2021-08-23
  • 2012-03-05
  • 2021-06-28
相关资源
最近更新 更多