我最初开始时使用std::multimap
来存储具有相同键的许多值,但后来我发现它并不保留具有相同键的值之间的插入顺序。 This answer声称可以用boost::multi_index::multi_index_container
完成,但没有举例。仔细看看这些文档,没有这种用法的例子,我不能让你知道如何使用这个东西。我期望来自使用较少的增强库的较差的文档,但这需要蛋糕。任何人都可以向我指出一个教程或示例,它显示它以我想要的方式使用,或者甚至可以自己提供一个示例?使用boost multi_index_container来保留插入顺序
回答
您可以通过使用boost::multi_index
以及两个索引:ordered_non_unique
(允许具有相同键的值)和random_access
(它将保留插入顺序)来实现此目的。
struct some {
long key;
int data;
int more_data;
// etc.
};
typedef multi_index_container<
some,
indexed_by<
random_access<>, // keep insertion order
ordered_non_unique< member<some, long, &some::key> >
>
> some_mic_t;
支持这个答案,从boost文档:**随机访问索引是自由顺序序列与恒定时间位置访问和随机访问迭代器。随机访问索引中的元素默认按其插入顺序排序** – 2014-04-16 00:30:29
怎么样
map<int, vector<string> >
或
map<int, list<string> >
@Kirill:很好的回答。我怀疑Boost的random_access可能会很慢,因为它会强制所有键的所有字符串保持在一个连续的结构中。而提问者只是希望将订单保存在每个键的映射值集合中。
'random_access'是一个附加索引。您使用'ordered_non_unique'进行搜索,然后使用'random_access'来遍历结果范围。这并不慢。 – 2010-07-14 04:39:50
(我使用了multi_index很多,但不是random_index,所以我不太确定任何这个) @Kirill:两点: @rmeador希望能够“保留值之间的插入顺序用同样的钥匙“。给定一个关键码,整个随机索引如何用于快速实现?我怀疑我建议的结构可能是做到这一点的唯一方法。 和 我的意思是插入新元素可能会比必要的慢,因为整个随机索引可能会过时。 – 2010-07-14 17:11:03
@Kirill:澄清一下,一旦ordered_non_unique已经确定了与单个键相对应的(未排序)值范围,那么您如何(快速)使用random_access对该组值进行排序?这组值可能会均匀分布在一个大的random_access索引中。遍历random_access范围将不会保持按键顺序。 – 2010-07-14 17:14:47
- 1. ,保留插入顺序
- 2. 使用boost :: multi_index_container
- 3. boost multi_index_container序列化
- 4. Infinispan缓存保留插入顺序
- 5. 保留插入数据的顺序phpmyadmin
- 6. 来自LinkedHashMap的集合(值)是否保留了插入顺序?
- 7. boost multi_index_container composite_key_compare
- 8. boost :: multi_index_container - equal_range values
- 9. boost :: multi_index_container在QMap中
- 10. boost :: unordered_map维护插入顺序?
- 11. 保留Neo4j数据成员中元素的插入顺序
- 12. 保留插入顺序的线程安全映射
- 13. 如何保留嵌套Perl哈希的插入顺序?
- 14. 保留番石榴的插入顺序SetMultimap
- 15. LinkedHashMap如何在内部保留对象的插入顺序
- 16. 证明Excel VBA Scripting.Dictionary不会保留项目插入的顺序
- 17. 保留插入顺序的集合类型
- 18. 如何在HashMap中保留插入顺序?
- 19. 自适应地图Scala中(或Java)保留插入顺序
- 20. boost multi_index_container折损索引
- 21. OrderedDict不保留顺序
- 22. ActiveRecord.find(array_of_ids),保留顺序
- 23. 保留数组的顺序
- 24. 保留注释的顺序
- 25. 保留哈希表顺序
- 26. Seq.groupBy:保留原始顺序
- 27. Java设置保留顺序?
- 28. JPA @ElementCollection:如何保持插入顺序
- 29. 使用插入排序来识别数组的顺序
- 30. jQuery插件asmSelect不保留排序顺序
你需要这是一个多地图吗? – doublep 2010-07-13 19:45:51
是的,我喜欢。我有相同的键的多个值。 – rmeador 2010-07-13 19:53:03