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

Ash*_*ban 5 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();
}
Run Code Online (Sandbox Code Playgroud)

}

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

Oli*_*rth 7

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

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

  • map中的erase()无效.没有返回迭代器 (2认同)