我正在编写一个带有网格控件的应用程序,我使用 std :: vector 来保存所有用户信息并使用for-loop将其显示在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>
我想插入一对&lt; 100,100&gt;在&lt; 2,2&gt;之间和&lt; 3,3&gt;,所以它变成:
pair<1, 1>
pair<2, 2>
pair<100, 100>
pair<3, 3>
有什么建议吗?
感谢。
答案 0 :(得分:1)
我会使用boost::container::flat_map for this, or maybe flat_set<>进行自定义比较,以便使用user_id对您的值进行排序。
来自boost.container库的flat_ *容器基本上是std :: vector伪装成关联容器。实现是一个std :: vector,它围绕着std :: map或std :: set接口(带有附加功能)。 std :: vector本身是可访问的,因此你仍然可以遍历所有具有相同属性的元素,而不是std :: vector。但是,这意味着当您插入或删除元素时,这些元素可能会在内存中移动,就像std :: vector一样。
如果你有几种不同类型的指数,另一种可能性就是使用boost::multi_index。