【问题标题】:Looking for std container between map and list在地图和列表之间寻找标准容器
【发布时间】:2017-08-16 09:28:24
【问题描述】:

寻找一个容器,将元素存储在自定义键(如地图)下,允许在键下搜索更复杂,然后是 O(n)(如地图),但也记住配对的顺序(键和 value) 被插入,允许 push_front 和 pop_back 功能,就像在列表中

编辑:只需使用两个容器即可解决。用于存储对的映射和用于按顺序存储索引的列表。如果有人提供更优雅的解决方案,会留下这个问题。

【问题讨论】:

  • 你可以使用multiindex 虽然语法有点粗糙
  • 没有标准的容器既可以排序又可以记住未排序的顺序。您可以通过使用 map 进行存储和快速搜索来构建一个简单版本的多索引,同时还将键存储在双端队列中(支持 push_front 和 pop_back)。假设快速搜索是最重要的。
  • c++11 有 std::unsorted_map,正是这样做的。

标签: c++ containers std


【解决方案1】:

标准库中没有这样的数据结构。

实现这种结构的“简单”方法是在内部使用两个独立的结构。用于查找的映射和用于按插入顺序迭代的列表(或向量或双端队列)。其中一个数据结构应该存储对象,另一个可以存储指向对象的指针。

Boost 库集合中有这种多索引容器的概括。

【讨论】:

  • 我认为列表比向量更好,因为列表迭代器永远不会失效,因此您可以将迭代器保留在地图中。
  • @alain 或者您可以将对象存储在地图中,并将迭代器存储在向量中,在这种情况下这不是问题。尽管如此,您最终还是会错过向量的最大好处,即内存的连续性。
  • 是的,这是可能的。
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 2020-08-31
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
相关资源
最近更新 更多