最近做一个项目遇到一个问题困扰我两天,差点自闭。经排查是
-
插入到unordered_map中的键值对的顺序和实际的键值对存在的顺序没有关系
众所周知,unordered_map插入元素后,键值不会自动排序,但是顺序却不一定和插入顺序一致。msvc和gcc编译器也各不相同。
std::unordered_map<char, int>test;test['A'] = 3;test['C'] = 0;test['B'] = 1;test['D'] = 1;for (const auto& item : test){std::cout << item.first << " " << item.second;}
msvc编译器打印结果:
A 3
C 0
B 1
D 1
gcc打印结果:
D 1
B 1
A 3
C 0
如果我们假设和插入顺序一致就会导致问题。unorder_map是哈希表结构,可能每个编译器的实现都不相同。