遍历地图并调用删除其他元素的函数是地图

时间:2011-06-05 12:29:29

标签: c++ stl

我有一张在全局记忆中定义的地图。 我正在迭代它,让我们说我在第三个元素。现在我正在调用另一个在同一个地图上生成自己的迭代器的函数,但它可能会删除地图中的第4个或第5个......元素。 我的问题是,当我从该函数返回并继续迭代地图时(我提醒你我在第3个元素中),我的迭代器可以无效还是安全?

抱歉,我无法附上非常长的代码。

感谢

编辑: 我的问题是这样的:

map<string,string> mapi;

void er() {
    mapi.erase("t");
} 

int main() {


mapi.insert(pair<string,string>("w","a"));
mapi.insert(pair<string,string>("e","a"));
mapi.insert(pair<string,string>("r","a"));
mapi.insert(pair<string,string>("t","a"));
mapi.insert(pair<string,string>("A","a"));
mapi.insert(pair<string,string>("u","a"));
mapi.insert(pair<string,string>("C","a"));

map<string,string>::iterator it;
for (it=mapi.begin(); it!=mapi.end(); it++) {
    cout << it->first << endl;
    if (it->first=="t")
        er();
}

}

在这种情况下我擦除相同的元素 - valgrind说它是一个错误。但是,当我删除其他元素时,它似乎工作正常。

1 个答案:

答案 0 :(得分:7)

来自http://www.sgi.com/tech/stl/Map.html

  

也从地图中删除元素   不会使任何迭代器失效,   当然,除了迭代器之外   实际上指向的元素   被删除。