【发布时间】:2011-03-14 18:33:51
【问题描述】:
假设我有一个 Person 对象的集合,每个对象看起来像这样:
class Person
{
string Name;
string UniqueID;
}
现在,这些对象必须存储在一个容器中,以便我可以订购它们,以便我可以很容易地给项目 X 找到项目 X+1 和 X-1。
但是,我还需要基于 UniqueID 的快速访问,因为集合会很大并且线性搜索不会削减它。
我目前的“解决方案”是将 std::list 与 std::map 结合使用。该列表包含 Persons(用于有序访问),并且该映射用于将 UniqueID 映射到对列表项的引用。更新“容器”通常涉及更新地图和列表。
它有效,但我觉得应该有一个更聪明的方法,也许是boost:bimap。有什么建议吗?
编辑:我对“订购”的要求有些混乱。解释一下,对象是从文件中按顺序流入的,容器中项目的“顺序”应该与文件顺序相匹配。顺序与 ID 无关。
【问题讨论】:
-
X+1和X-1是什么意思?我感觉它不是指UniqueID字段,那是什么?你指的是什么顺序? -
我指的是容器内的排序。即(假设一个向量)Array[X]、[X-1] 和 [X+1]
-
容器中的顺序是什么?我认为这就是马蒂厄试图确定的。
-
@Joel,容器中的订单就是“容器中的订单”。没有指定它的字段(还)。这只是项目从文件中流入的顺序。 (是的,这很重要)
-
在这种情况下,bimap 可能是要走的路。
标签: c++ stl containers