【发布时间】:2018-07-24 22:32:38
【问题描述】:
所以我有 2 个 STL 映射,我在其中从文件中读取数据。它将数据读入一个,直到读入的数据为 0,然后它移动到第二个映射并将数据存储到那个映射中。
我正在尝试在 map1 中找到不在 map2 中的最大元素。这是我的代码:
map<int, int> dataMap1;
map<int, int>:: reverse_iterator i;
map<int, int> dataMap2;
map<int, int>:: iterator j;
for(i = dataMap1.rbegin(); i != dataMap1.rend(); i++) {
largestNum = i->first;
j = dataMap2.find(largestNum);
if(largestNum > j->first) {
cout << largestNum << endl;
break;
} else {
continue;
}
}
但是,它并没有按预期工作。它有时会给我正确的输出,但有时它会给我错误的答案。
如果有人可以帮助我,我将不胜感激。
谢谢。
编辑:示例数据 - 2
4
3
6
5
9
0 // 上面这个存储在map1, 0下面的都存储在 地图2
1
4
5
3
【问题讨论】:
-
您是否已采取措施确保
j = dataMap2.find(largestNum);可以找到largestNum?如果不能,find将返回dataMap2.end(),并且除了测试结束之外,您不能使用结束迭代器进行任何其他操作。j->first可能无效。 -
重读问题。似乎关键是要找到两个地图中都不存在的元素。当你找到它时,它将通过测试
j == dataMap2.end()。 -
不相关:如果
map<int, int> dataMap1;中的第二个int与第一个int相同,请考虑改用std::set。 -
我该怎么做?另外,有序映射是解决这个问题的最佳数据结构,还是有更好、更有效的数据结构来解决这个问题?
-
要回答这个问题,我必须看看数据是什么样的以及你是如何使用它的。看看Algorithms Library。里面有一些简洁的东西,比如
std::set_intersection和max_element可以把工作变成单行。