我目前有一个std::map<std::string,int>存储整数值到唯一字符串标识符,我确实查找字符串.它主要是我想要的,除了它不跟踪插入顺序.因此,当我迭代地图以打印出值时,它们将根据字符串进行排序; 但是我希望它们按照(第一次)插入的顺序排序.
我想过使用一个vector<pair<string,int>>替代,但我需要查找字符串并将整数值增加大约10,000,000次,所以我不知道是否std::vector会明显变慢.
有没有办法使用std::map或是否有std更适合我需要的容器?
[我在GCC 3.4上,我的价值可能不超过50对std::map].
谢谢.
在将其标记为重复之前,我已经在此处、此处和此处重复了第一个。
我知道boost::multi_index,并且使用了一个我缺乏它的环境,并且 astd::unordered_set不一定以确定的插入顺序存储元素。
我发现使用两个容器的概念,说一个额外的std::vector粗鲁。
我想要的是一个涉及比较器的解决方案,我可以在 a 的std::set模板参数中使用它(澄清一下,这可能是一个简单的函子结构,包含bool operator()()重载、常规函数或 lambda)。是否可以?
初始化必须通过 std:: 容器的开始迭代器/结束迭代器构造函数进行,如本代码片段所示。
std::string str; cin >> str;
std::set<char>(str.begin(), str.end());
Run Code Online (Sandbox Code Playgroud)另外,另一个有趣的用例是创建一个哑散列包装函子,允许将插入顺序推入 astd::unordered_set的模板参数中。