使用boost multi_index_container来保留插入顺序

时间:2010-07-13 19:32:53

标签: c++ boost multimap multi-index

我最初开始使用std::multimap来存储具有相同键的许多值,但后来我发现它不会保留具有相同键的值之间的插入顺序。 This answer声称可以使用boost::multi_index::multi_index_container完成,但没有举例说明。通过文档查看,没有这种用法的例子,我无法对你应该如何使用这个东西做出正面或反面。我开始期待来自较少使用的boost库的文档很差,但这需要蛋糕。任何人都可以向我指出一个教程或示例,它显示它以我想要的方式使用,或者甚至可能自己提供一个例子吗?

2 个答案:

答案 0 :(得分:6)

您可以使用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;

答案 1 :(得分:0)

怎么样?
map<int, vector<string> >

map<int, list<string> >
@kirill:很好的答案。我怀疑Boost的random_access可能会很慢,因为它会强制所有键的所有字符串都保持在一个连续的结构中。而提问者只是希望在每个键的映射值集中保留顺序。