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

Rod*_*ddy 9 c++ containers stl

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

class Person 
{
  string Name;
  string UniqueID;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Kir*_*sky 8

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

  • `Indices`是技术上正确的复数名词.但是,任何人都会理解`索引'...... (3认同)

小智 7

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