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

is there any sequence container that also maintains a primary key? (c++)

本文关键字:c++ 维护 任何序 是否      更新时间:2023-10-16

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

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

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

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

pair<1, 1>
pair<2, 2>
pair<3, 3>

我想在<2,2>和<3,3>之间插入一对<100,100>,所以它变成了:

pair<1, 1>
pair<2, 2>
pair<100, 100>
pair<3, 3>

任何建议吗?

谢谢。

我会使用boost::container::flat_map,或者flat_set<>与一个自定义比较,将使它排序您的值使用user_id。

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

如果您有几种不同类型的索引,另一种可能性是使用boost::multi_index.