考虑以下代码:
// in global space
int v[50000];
// in a function
int n;
std::cin >> n;
for(int i(0); i < n; ++i)
std::cin >> v[i];
std::map<int, int, std::greater<int>> m;
for(int i(n-1); i > -1; --i){
auto it(m.find(m[v[i]]));
if(it == std::end(m)){
m[v[i]] = i; // (1)
// m.insert({m[v[i]], i}); (2)
// m.insert(std::make_pair(m[v[i]], i)); (3)
}
}
std::cout << "map : \n";
for(auto &x: m)
std::cout << x.first << ' ' << x.second << '\n';
假设我们有输入:3 1 2 3 使用第一个版本的 map 插入我得到了预期的结果:
3 2
2 1
1 0
但是我得到了第二个和第三个:
3 0
2 0
1 0
他们应该给出相同的结果..
最佳答案
m.insert({m[v[i]], i}); //(2)
您必须按如下方式更正它:
m.insert({v[i], i}); //(2)
关于C++ 映射插入不良行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30398644/