最近做一个项目遇到一个问题困扰我两天,差点自闭。经排查是
众所周知,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是哈希表结构,可能每个编译器的实现都不相同。