为
unordered_multimap
编写的示例程序和预期的一样,元素应该按照插入的顺序打印,但在实际输出中是不同的。为什么元素没有按照插入的顺序打印。如何修改程序以按插入顺序打印元素。
#include <iostream>
#include <map>
#include <unordered_map>
int main ()
{
std::unordered_multimap<std::string, std::string> mymm;
mymm.insert(std::make_pair("key6","50"));
mymm.insert(std::make_pair("key1","150"));
mymm.insert(std::make_pair("key4","300"));
mymm.insert(std::make_pair("key2","200"));
mymm.insert(std::make_pair("key5","100"));
mymm.insert(std::make_pair("key3","250"));
for (auto x : mymm)
{
std::cout << "key:"<<x.first<<":value:"<<x.second<<std::endl;;
}
return 0;
}
输出:
key:key5:value:100
key:key4:value:300
key:key1:value:150
key:key3:value:250
key:key6:value:50
key:key2:value:200
元素未按任何特定顺序排序。这就是名字的
unorderd..
部分所暗示的。您可以从 begin
到 end
迭代它们,但是如果您的代码采用任何特定的顺序而不是通常的顺序,那就是一个错误。
来自cppreference:
在内部,元素没有按任何特定顺序排序,而是组织到桶中。元素被放入哪个桶完全取决于其键的哈希值。这允许快速访问单个元素,因为一旦计算出哈希值,它就会指向元素放入的确切桶。
要按插入顺序订购它们,您可以使用
std::vector<std::pair<std::string,std::string>>
.