我最初开始使用std::multimap
来存储具有相同键的许多值,但后来我发现它不会保留具有相同键的值之间的插入顺序。 This answer声称可以使用boost::multi_index::multi_index_container
完成,但没有举例说明。通过文档查看,没有这种用法的例子,我无法对你应该如何使用这个东西做出正面或反面。我开始期待来自较少使用的boost库的文档很差,但这需要蛋糕。任何人都可以向我指出一个教程或示例,它显示它以我想要的方式使用,或者甚至可能自己提供一个例子吗?
答案 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可能会很慢,因为它会强制所有键的所有字符串都保持在一个连续的结构中。而提问者只是希望在每个键的映射值集中保留顺序。