是否有任何序列容器也维护主键?(c++)
is there any sequence container that also maintains a primary key? (c++)
我正在编写一个带有网格控件的应用程序,我使用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.
相关文章:
- 如何维护资源管理器项目视图中当前可见的项目列表
- 维护unordered_map但同时每一步都需要最低的映射值
- GCC,CMake,预编译标头和维护依赖项
- Q没有管理权限的 exe 无法启动维护工具
- 是否很好地使用状态模式来维护当前选定的对象?
- 如何维护对 std::p riority_queue 容器的引用?
- 维护/维持两个代码集的风险,一个用于 CPU,一个用于 GPU,需要执行非常相似的功能
- 将Qt应用程序维护为模块和库
- 树不维护递归迭代器成员
- 为多个类实例维护共享_ptr的静态列表
- 如何维护V8上下文以备将来使用
- 多线程和单线程代码维护
- 类内非静态字段初始化 + 对象池 - >降低可维护性/可读性
- 维护对元素参考类型
- C 命名区以维护旧代码
- 修改贝尔曼-福特算法以维护基于成本的有序列表
- 以易于维护的方式实现许多类似的(子)类
- 尝试从成员函数推送时不维护元素的成员向量
- C :模拟键,如果在Windows上按下,请将其维护
- 不维护迭代剂脱烯