C++ 如何在地图中循环设置
C++ How to loop through set in map?
我在学校项目中遇到了一个问题:我需要一组映射到关键数字的数字。 ZZ
是 NTL 库中大整数的类,但这并不重要。我的程序总是在内部循环中失败,并显示it_set2
不能迭代的消息。
std::map<ZZ, std::set<ZZ>> mapa;
std::map<ZZ, std::set<ZZ>>::iterator it_map;
std::set<ZZ>::iterator it_set1, it_set2;
for (it_map = mapa.begin(); it_map != mapa.end(); ++it_map) {
for (it_set1 = it_map->second.begin(); it_set1 != it_map->second.end(); ++it_set1) {
for (it_set2 = ++it_set1; it_set2 != it_map->second.end(); ++it_set2) {
/*
some function that uses *it_set1, *it_set2
*/
}
}
}
感谢您的帮助。
我想
问题出在最内部的循环中。如果您希望it_set2
指向it_set1
当前指向的下一个元素(但实际上没有递增it_set1
),那么您应该将第三个循环更改为以下内容:for(it_set2 = it_set1; ++it_set2 != it_map->second.end(); )
.
这将确保您不会越界,也不会在不必要的情况下增加it_set1
。
鉴于您提供的信息,我怀疑您在第二个循环中点击最后一个设置元素时遇到了问题。一旦你迭代最后一个,第三个循环就会递增it_set1
然后是end
迭代器(就像你查看最后一个元素一样)。第三个for循环终止,第二个循环执行其过去体指令,++it_set1
将迭代器移过end
,从而调用未定义的行为。
相关文章:
- 具有Qt事件循环的可移植通用共享库设置
- 对于完成布尔值设置为 true 后未停止的循环
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 是否可以为一个循环设置多个条件
- 循环 std::由索引设置
- 第二个 while 循环未运行,将值设置为 "nan"
- C++ if 语句将条件设置为 true 和循环中的 OR-ing 条件之间的行为差异
- while 循环是否在设置标志的情况下运行多次?
- 有没有办法在C++中将偏移量设置为基于范围的 for 循环?
- 循环以使用设置模板类将所有 26 个字母添加到 s 中
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 在循环中设置指向 int 值的指针
- 如何将布尔矩阵的每个元素设置为false而不循环
- 如何使用Boost Graph库使用循环中的循环设置相同的边缘重量
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 如何在没有循环的字节中设置位
- 对于循环设置变量为条件
- C++ 如何在地图中循环设置
- C++ std::map<std::string, std::set<std::string>> .如何循环设置值?
- Arduino循环/设置问题