我刚刚遇到了代码(C++14)中的一个奇怪的错误,原因是 std::map 的行为出乎了我的意料。以下是一个简单的示例来演示这种行为:
#include <iostream>
#include <map>
int main()
{
std::map<int, int> m;
for(int i = 0; i < 3; ++i) {
m[m.size()] = m.size();
}
for(const std::pair<int, int>& e : m) {
std::cout << e.first << " " << e.second << std::endl;
}
return 0;
}
这将打印:
0 1
1 2
2 3
我原本期望的是:
0 0
1 1
2 2
这是怎么回事?这个地图首先添加一个元素,并将 first
设置,只有当地图的大小已经增加时才设置 second
?我不太明白这样做的意义在哪里。或者还有其他解释吗?谢谢!