我最初開始時使用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