【发布时间】:2010-11-01 15:55:26
【问题描述】:
我正在寻找一个可以同时享受地图容器和列表容器优势的 C++ 容器。
map 我想保持的容器优势:
- O(log(n)) 次访问
- operator[] 易用性
- 稀疏性
列出我想保持的容器优势:
- 项目之间有顺序
- 能够轻松遍历列表更新:通过基于键或值的排序顺序
一个简单的示例应用程序是保存某些有效日期的列表(营业日期、假期、其他一些重要日期...),一旦给出特定日期,您可以立即找到它“地图样式”和然后找到下一个有效日期“列表样式”。
【问题讨论】:
-
STL 和 Boost 有什么我不理解的地方吗?
-
在数据中保留索引怎么样?就像一个“日期”索引。这意味着多个容器指向同一个数据集。这会不利吗?
-
当你说“在项目之间有一个订单”时,你的意思是有一个 任意 订单,定义为和何时添加(关于序列),还是您的意思是在键之间具有恒定关系的顺序(以关联容器的方式)?您不能将通过索引保证的快速访问与稀疏性、和任意顺序结合起来(尽管您可以或多或少地使用多索引哈希表到达那里),所以当您说“O(1) " 访问,你的意思是 O(1) 通过键、索引还是两者都访问?
-
Map 有being()、end() 和find() 都返回允许顺序访问容器其余部分的迭代器。
-
@Jonathan:不正确:迭代器以正确的顺序遍历容器。请记住,地图是按键排序的。迭代器按照键定义的顺序遍历映射。如果你不喜欢默认的(std::less
默认使用 operator <)排序顺序,你可以定义自己的。
标签: c++ map linked-list containers