这是我的代码
map<string,int> persons;
persons["B"] = 123;
persons["A"] = 321;
for(map<string,int>::iterator i = persons.begin();
i!=persons.end();
++i)
{
cout<< (*i).first << ":"<<(*i).second<<endl;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
B:123
A:321
Run Code Online (Sandbox Code Playgroud)
但它给出的输出是:
A:321
B:123
Run Code Online (Sandbox Code Playgroud)
我希望它保持键中插入键和值的顺序map<string,int>.
可能吗?或者我应该使用其他一些STL数据结构?哪一个?
我最初开始使用a std::multimap来存储具有相同键的许多值,但后来我发现它不会保留具有相同键的值之间的插入顺序. 这个答案声称它可以完成boost::multi_index::multi_index_container,但没有举例.通过文档查看,没有这种用法的例子,我无法对你应该如何使用这个东西做出正面或反面.我开始期待来自较少使用的boost库的文档很差,但这需要蛋糕.任何人都可以指向一个教程或示例,显示它使用我想要的方式,或者甚至可能自己提供一个示例?
我写了一些像这样的代码:
unordered_map<int, int> uii;
uii.insert(make_pair(12,4));
uii.insert(make_pair(3,2));
uii.insert(make_pair(6,1));
uii.insert(make_pair(16,9));
....
Run Code Online (Sandbox Code Playgroud)
当我使用for循环访问此地图时,它按照我插入的正确顺序打印键.我测试了unordered_set,结果相同.
所以我的问题是,C++标准是否保证访问顺序为插入顺序,就像Java一样LinkedHashMap?