我正在尝试以相反的顺序打印unordered_map的内容,但是 它没有rbegin或rend,所以你不能使用reverse_iterator。如何逆转unordered_map?
编辑(来自评论):我希望密钥按插入顺序排列,因此我无法使用地图。键似乎保持在插入顺序中,但我需要它们反转。
答案 0 :(得分:8)
只需阅读问题中的第一句话就可以得到答案:
我正在尝试反向打印
unordered_map
的内容 为了
您无法以任何顺序打印,因为它是无序的。在无序结构中谈论秩序是没有意义的。如何在内部组织unordered_map
的内容并不重要:这是一个实现细节,您无法访问它。对外界来说,unordered_map
根本没有订单,你不能指望它这样做。
答案 1 :(得分:4)
你可以从任何一对双向迭代器中弄乱你自己的一对反向迭代器:
std::reverse_iterator rbegin(first);
std::reverse_iterator rend(last);
正如@Tin建议的那样,这不起作用。没关系。
答案 2 :(得分:0)
将无序地图的内容插入另一张未退回的地图。请记住以对形式使用make_pair进行插入以保留数据。
答案 3 :(得分:0)
当您使用unordered_map时,将不会维护特定顺序,因为键值将具有基于实现的哈希代码。
正如您所提到的,您需要按照插入的顺序使用它们 - 很可能您将迭代某种线性列表并将键值对存储在无序映射中。而是使用ordered_map并基于列表的索引插入。在这种情况下,您的订单将作为基于索引作为键插入地图的维护。
答案 4 :(得分:0)
首先,当您以键-值对形式输入某些输入,并且需要对其进行一些操作并按接收到的输出顺序打印一些结果时,可以使用这种类型的东西。
因此您可以使用无序地图。
正如以上文章所述,无序映射是完全无序的,因此,执行此操作的一种好方法是让向量具有键,然后在无序映射中包含所有键值对。然后,首先使用vector中的键值,然后使用find()在地图中查找值,然后使用迭代器打印键值对。
请参见以下示例:
假设您要使用两个整数作为键值对形式的输入,并且为了对其进行一些操作,您使用了无序映射,现在您要按输入顺序打印值。 / p>
vector<int> v;
unordered_map<int,int> m;
unordered_map<int,int>::iterator it;
现在,当您要按输入顺序打印输出时。
for (int i=0;i<v.size();i++){
it=m.find(v[i]);
if(it!=m.end())
cout << it->first << " " << it-second << "\n";
}
这将按照输入顺序打印键/值对。
我希望这会有所帮助!
答案 5 :(得分:-1)
有同样的问题,unordered_map以相反的顺序存储数据
所以
map[A]=X
map[B]=Y
map[C]=Z
如果你迭代(map:iterator it = begin ...)你将会得到
Z
Y
X
所以它意味着一个订单,女巫被颠倒了