C++ 是否有任何序列容器也维护主键?(c+;+;)

C++ 是否有任何序列容器也维护主键?(c+;+;),c++,containers,C++,Containers,我正在编写一个带有网格控件的应用程序,我使用std::vector保存所有用户信息,并使用for循环将其显示在gui上 问题是当某些记录(具有指定的用户id)被修改时,我需要更新gui。我正在使用std::find_if搜索目标用户id,获取记录的索引,然后更新gui上的索引第行 当数据增长时,线性搜索可能会很昂贵,因此我正在寻找一个顺序容器,以便容器的索引与gui上的行索引相对应。它应该是关联的,我可以通过主键快速找到索引 我发现std::unordered_map非常接近我需要的,但它缺少一

我正在编写一个带有网格控件的应用程序,我使用std::vector保存所有用户信息,并使用for循环将其显示在gui上

问题是当某些记录(具有指定的用户id)被修改时,我需要更新gui。我正在使用std::find_if搜索目标用户id,获取记录的索引,然后更新gui上的索引第

当数据增长时,线性搜索可能会很昂贵,因此我正在寻找一个顺序容器,以便容器的索引与gui上的行索引相对应。它应该是关联的,我可以通过主键快速找到索引

我发现std::unordered_map非常接近我需要的,但它缺少一些功能,比如在中间插入数据,例如,unordered_map中有3个元素:

pair<1, 1>
pair<2, 2>
pair<3, 3>
对
一对
一对
我想在和之间插入一对,因此它变成:

pair<1, 1>
pair<2, 2>
pair<100, 100>
pair<3, 3>
对
一对
一对
一对
有什么建议吗

谢谢。

我将与自定义比较一起使用,它将使用用户id对您的值进行排序

boost.container库中的平面容器基本上是std::vector伪装成关联容器。实现是围绕std::map或std::set接口的std::vector(带有附加功能)。std::vector本身是可访问的,因此您仍然可以使用与std::vector相同的属性遍历所有元素。然而,这意味着当您插入或删除元素时,这些元素可能会在内存中移动,就像std::vector一样


如果您有几种不同类型的索引,另一种可能是使用。

您所说的“中间插入数据”是什么意思?这表明您关心元素的顺序。但是你真的在乎吗?你真的意识到你的方法有任何性能问题吗!?此外,您必须确保存在性能问题。线性搜索可以比其他方法快到一定的数据大小。如果您想使用两个不同的键进行访问,您可以使用两个标准容器,或第三方多键容器,例如。无论您使用什么技术,都将比GUI处理简单代码(如flat_map m;不编译,它抱怨g:\boost\boost/intrusive/detail/has_member_function_callable_with.hpp(200):错误C2228:左边的“.select_on_container\u copy_construction”必须有class/struct/union,我使用的是vs2013。@aj3423这是因为正式的boost 1.55.0不使用vs2013编译。您需要应用一个短补丁,只需在svn.boost.org上搜索该错误并手动应用补丁,我很容易就完成了。或者等待即将发布的1.56版本。