C++ 如何在地图中循环设置

C++ How to loop through set in map?

本文关键字:循环 设置 地图 C++      更新时间:2023-10-16

我在学校项目中遇到了一个问题:我需要一组映射到关键数字的数字。 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,从而调用未定义的行为。