繁体   English   中英

哪个STL容器用于基于密钥访问的有序数据?

[英]Which STL container for ordered data with key-based access?

假设我有一个Person对象的集合,每个对象看起来像这样:

class Person 
{
  string Name;
  string UniqueID;
}

现在,对象必须存储在一个容器中,这个容器允许我对它们进行排序,这样我就可以给项目X轻松找到项目X + 1和X-1。

但是,我还需要基于UniqueID的快速访问,因为集合将很大并且线性搜索不会削减它。

我当前的'解决方案'是将std :: list与std :: map结合使用。 该列表包含Persons(用于有序访问),该映射用于将UniqueID映射到对列表项的引用。 更新“容器”通常涉及更新地图和列表。

它有效,但我觉得应该有一个更聪明的方法,也许是boost:bimap 建议?

编辑:关于我对“订购”的要求存在一些困惑。 为了解释,对象从文件顺序流式传输,容器中项目的“顺序”应与文件顺序匹配。 订单与ID无关。

boost:bimap是最明显的选择。 bimap基于boost::multi_index ,但bimap简化了语法。 我个人更喜欢boost::multi_index不是boost::bimap因为它可以在将来轻松地向Person结构添加更多索引。

没有标准库容器可以执行您想要的操作 - 因此您必须使用两个容器或Boost解决方案。 如果使用两个容器,我几乎在所有情况下通常都会更喜欢列表中的向量或双端队列。

为什么不使用两个映射,一个使用Person作为Key,另一个使用UniqueId作为Key,但这需要更新它们。

您可以创建一个回调函数,只要有任何更改,它就会更新两个映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM