C 中MAP的反向迭代错过了第一个元素
reverse iteration of map in c++ missing out the first element
我有一个代码,在该代码中,我正在逆转C 中的地图。对于地图中的n对,有时地图会打印出n对,有时是n-1对。对于测试用例
4 2
2 1
3 5
2 3
1 5
它打印4个hi,对于下一个情况3 hi
4 1
0 2
0 3
3 5
0 6
我的代码:
include cmath, cstdio, vector, iostream, map, algorithm, using namespace std;
int main() {
int n,f;
cin >> n >> f;
int k[n],l[n],dif[n];
map<int,int> m;
map<int,int>::reverse_iterator it;
for (int i=0;i<n;i++){
scanf("%d %dn",&k[i],&l[i]);
dif[i] = l[i]-k[i];
m.insert(make_pair(dif[i],l[i]));
}
int a = 0;
int sum = 0;
for(it = m.rbegin(); it != m.rend(); ++it ) {
cout << "hi" << endl;
int article = it->second - it->first;
int people = it->second;
if (a < f and article!=0){
a++;
if (2*article > people){
sum = sum + people;
} else {
sum = sum + (2*article);
}
} else {
if (article > people){
sum = sum + people;
} else {
sum = sum + article;
}
}
}
cout << sum;
return 0;
}
这与反向迭代无关,而前迭代将是相同的。地图具有一对键和值。每个键只能包含在地图中一次。当您再次插入相同的键时,上一个值将被覆盖。在第二个测试用例中,您将键0
设置三遍:
4 1
0 2 <--
0 3 <--
3 5
0 6 <--
因此您的地图实际上只有三个值,因此三个" HI"是正确的。在您的第一个示例中,您覆盖键2
仅两次,因此四个" hi"。也许地图不是您要寻找的正确的容器。
相关文章:
- 随机访问迭代器:我错过了什么?
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 字符串::是否替换了迭代器和引用?
- C 中MAP的反向迭代错过了第一个元素
- 虽然循环迭代了C++中的太多元素
- 我如何仅在列表中迭代特定量的次数?即,cout列出了前5个元素
- OpenCV加速了Mat迭代
- 此迭代器代码中发生了什么?
- Visual Studio检查了迭代器不抛出异常
- Qt 使用迭代器重载了 qtextstream 输出运算符
- 我一直得到列表迭代器不可引用,我做错了什么
- map/set :: 插入是否提供了正确的迭代器提示,它的复杂性是多少?
- C++ : 为什么我的程序停止了?迭 代
- 迭代器(字符串::迭代器)的行为好像超出了作用域
- 为STL迭代器定义了哪些运算符
- 迭代器失去了它的值-简单的短循环c++
- 为什么迭代器在与map.begin()一起使用时预先增加了
- 拼接列表后,迭代器存储了错误的值
- 我怎么知道迭代器的自减量超过了向量的开头
- 实现了在磁盘上存储值的容器的迭代操作符*