我正在尝试弄清楚
是否有任何方法可以知道在删除后
std::multimap
迭代器的工作原理,因此我创建了一个简单的示例来展示我的问题实质。如果取消注释第1种情况,我期望迭代器指向键为1的第一个元素,但实际上它打印出所有与键0相关联的值(就像没有被删除一样),有时会崩溃,可能是因为迭代器无效。但是,如果取消注释第2种情况,则所有键为1的值都将被正确删除。是否有任何方法可以知道在删除后
multimap
的下一个有效迭代器是什么?
(例如std::vector.erase(...)
返回一个)std::multimap<int, int> m;
for(int j=0; j<3; ++j) {
for(int i=0; i<5; ++i) {
m.insert(std::make_pair(j, i));
}
}
for(std::multimap<int, int>::iterator it=m.begin(); it!=m.end();) {
printf("%d %d\n", (*it).first, (*it).second);
++it;
if( (*it).second == 3 ) {
//m.erase(0); //case 1
m.erase(1); //case 2
}
}
it->first
,而是要用(*it).first
? - curiousguyit->
?”这会进一步减慢程序理解的速度。 - curiousguy