c++ - 迭代 map 并调用删除其他元素的函数是 map

标签 c++ stl

我有一个在全局内存中定义的 map 。 我正在迭代它,假设我在第三个元素中。现在我正在调用另一个函数,它在同一个 map 上生成自己的迭代器,但它可能会删除 map 中的第 4 或第 5 ... 元素。 我的问题是,当我从该函数返回并继续遍历 map 时(我提醒你我在第 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 说这是一个错误。然而,当我删除其他元素时,它似乎工作正常。

最佳答案

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

Erasing an element from a map also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased.

关于c++ - 迭代 map 并调用删除其他元素的函数是 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242904/

相关文章:

C++ boost 数组

c++ - 从 STL 迭代器非公开派生的自定义迭代器的最小功能?

c++ - 在这种情况下如何/返回什么?

c++ - 对 vector 进行排序而不改变原始 vector 的最佳方法是什么?

c++ - 最快的 C++ 容器 : Unique Values

C++ 临时变量生命周期

c++ - 2D游戏物理?

C++ 动态分配 header

c++ - 如何根据元素数量选择 max_load_factor?

c++ - 一种使用 STL 计算 std::string vector 中字符的方法?