猿问

一个跟踪插入顺序的std :: map?

我目前有一个std::map<std::string,int>存储整数值到唯一字符串标识符,我确实查找字符串。它主要是我想要的,除了它不跟踪插入顺序。因此,当我迭代地图以打印出值时,它们将根据字符串进行排序; 但是我希望它们按照(第一次)插入的顺序排序。


我想过使用一个vector<pair<string,int>>替代,但我需要查找字符串并将整数值增加大约10,000,000次,所以我不知道是否std::vector会明显变慢。


有没有办法使用std::map或是否有std更适合我需要的容器?


[我在GCC 3.4上,我的价值可能不超过50对std::map]。


谢谢。


侃侃无极
浏览 1100回答 3
3回答

缥缈止盈

如果你在std :: map中只有50个值,你可以在打印之前将它们复制到std :: vector,并使用适当的函子通过std :: sort进行排序。或者你可以使用boost :: multi_index。它允许使用多个索引。在您的情况下,它可能如下所示:struct value_t {&nbsp; &nbsp; &nbsp; string s;&nbsp; &nbsp; &nbsp; int&nbsp; &nbsp; i;};struct string_tag {};typedef multi_index_container<&nbsp; &nbsp; value_t,&nbsp; &nbsp; indexed_by<&nbsp; &nbsp; &nbsp; &nbsp; random_access<>, // this index represents insertion order&nbsp; &nbsp; &nbsp; &nbsp; hashed_unique< tag<string_tag>, member<value_t, string, &value_t::s> >&nbsp; &nbsp; >> values_t;
随时随地看视频慕课网APP
我要回答