为什么 unordered_multimap 中的元素被打乱顺序

问题描述 投票:0回答:1

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
c++ c++17 unordered-map
1个回答
0
投票

元素未按任何特定顺序排序。这就是名字的

unorderd..
部分所暗示的。您可以从
begin
end
迭代它们,但是如果您的代码采用任何特定的顺序而不是通常的顺序,那就是一个错误。

来自cppreference:

在内部,元素没有按任何特定顺序排序,而是组织到桶中。元素被放入哪个桶完全取决于其键的哈希值。这允许快速访问单个元素,因为一旦计算出哈希值,它就会指向元素放入的确切桶。

要按插入顺序订购它们,您可以使用

std::vector<std::pair<std::string,std::string>>
.

© www.soinside.com 2019 - 2024. All rights reserved.