C++ 使用boost multi_index_容器保持插入顺序

C++ 使用boost multi_index_容器保持插入顺序,c++,boost,multimap,multi-index,C++,Boost,Multimap,Multi Index,起初,我使用std::multimap来存储具有相同键的多个值,但后来我发现它没有保留具有相同键的值之间的插入顺序。声称它可以通过boost::multi_index::multi_index_容器实现,但没有给出示例。翻阅文档,没有这种用法的例子,我也不知道你应该如何使用它。我开始期望使用较少的boost库提供糟糕的文档,但这需要蛋糕。有人能给我指出一个教程或示例,说明它是以我想要的方式使用的,或者甚至可以自己提供一个示例吗?您可以通过使用boost::multi\u index和两个索引来实

起初,我使用std::multimap来存储具有相同键的多个值,但后来我发现它没有保留具有相同键的值之间的插入顺序。声称它可以通过boost::multi_index::multi_index_容器实现,但没有给出示例。翻阅文档,没有这种用法的例子,我也不知道你应该如何使用它。我开始期望使用较少的boost库提供糟糕的文档,但这需要蛋糕。有人能给我指出一个教程或示例,说明它是以我想要的方式使用的,或者甚至可以自己提供一个示例吗?

您可以通过使用boost::multi\u index和两个索引来实现这一点:ordered\u non\u uniques允许使用相同键的值,并保持插入顺序

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;
来一杯怎么样

map<int, vector<string> >


@基里尔:回答得好。我怀疑Boost的随机访问可能非常慢,因为它将强制所有键的所有字符串都保存在一个连续的结构中。而提问者只想在每个键的映射值集中保留顺序。

你需要这是一个多重映射吗?是的,我需要。我有多个相同键的值。随机访问是一个附加索引。使用有序非唯一搜索,然后使用随机访问在结果范围内进行迭代。这并不慢。我经常使用多索引,但不是随机索引,所以我对@Kirill:Two points:@rmeador希望能够在具有相同键的值之间保留插入顺序,这一点我不太确定。给定一个键,如何使用整个随机索引快速实现这一点?我怀疑我建议的结构可能是实现这一目标的唯一途径。我的意思是新元素的插入可能比必要的要慢,因为整个随机索引可能已经过时。@Kirill:为了澄清,一旦有序的非唯一性已识别出与单个键对应的一系列未排序的值,那么如何快速使用随机访问对该组值进行排序?这组值可以均匀地分布在一个大的随机访问索引中。在random_访问范围内进行迭代将无法保持键的有序性。boost文档中支持这一答案:random access Index是具有恒定时间位置访问和随机访问迭代器的自由顺序序列。默认情况下,随机访问索引中的元素按照插入列表的顺序进行排序:gist.github.com/dev-guy/7d5036204b5cfe4de7ba29aa48e11222
map<int, list<string> >