链表,每个键包含多个数据元素

Linked list with multiple data elements per key

本文关键字:数据 元素 包含多 链表      更新时间:2023-10-16

我正在创建一个输入管理器,用于存储事件和关联的方法(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将被er.first->second将是函数处理程序。