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

时间:2014-11-19 09:54:09

标签: c++ map set containers

我在学校项目中遇到了一个问题:我需要一组映射到键号的数字。 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
            */
        }
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题出现在最内循环中。如果您希望it_set2指向it_set1当前指向的下一个元素(但实际上没有递增it_set1),那么您应该将第三个循环更改为以下内容:{{1} }。

这将确保您不会超出界限,并且在没有必要时不会递增for(it_set2 = it_set1; ++it_set2 != it_map->second.end(); )

答案 1 :(得分:0)

根据您提供的信息,我怀疑您在第二个循环中遇到最后一个set-element时会遇到问题。迭代完最后一个循环后,第三个循环递增it_set1,然后是end迭代器(当你查看最后一个元素时)。第三个for循环终止,第二个循环执行其past-body指令,++it_set1移动迭代器超过end,从而调用未定义的行为。