c++ - 在 C++ 映射上使用迭代器删除

标签 c++ dictionary iterator behavior erase

我遇到了以下行为:我创建了一个 map ,在键上查找并删除了 map 条目。删除后,我使用迭代器打印元素,我预计它会转储核心但它有效。

为什么有效?

     typedef std::pair<std::string, int> pair;
    std::map<pair, int> nameidCntMap;

    pair pair1("ABC", 139812);
    pair pair2("XYZ", 139915);
    pair pair3("PQR", 139098);


    nameidCntMap.insert(std::make_pair(pair1, 1));
    nameidCntMap.insert(std::make_pair(pair2, 1));
    nameidCntMap.insert(std::make_pair(pair3, 1));

    std::map<pair, int>::iterator it = nameidCntMap.find(pair1);
    if (it != nameidCntMap.end())
    {
            symsrcidCntMap.erase(it);
   
            std::cout<<"Pair::first: "<<it->first.first << "Pair::second: "<<it->first.second<<"map second:"<<it->second<<std::endl;
    }

最佳答案

Why does it work?

它不“工作”。

程序的行为未定义。

expected it to dump core

您的期望被误导了。当您间接通过无效的迭代器时,该程序未定义为“转储核心”。没有为此类程序定义行为。因此,任何行为都是可能的。在所有可能的行为中,有可能该行为是您没有预料到的,或者您认为“有效”的行为。

关于c++ - 在 C++ 映射上使用迭代器删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64905918/

相关文章:

c++ - boos::asio async_wait 似乎在阻塞

c# - 如何使用单键查找优化更新 C# 字典?

Python 列表字典 - 返回具有唯一值的键

c++ - 复制三重嵌套容器

c++ - 初始化指向常量数组的指针

c++ - 如何阻止 Mongoose 记录到标准输出?

Swift Guard else 调用具有 NULL 值的字典键

iterator - 为什么 .flat_map() 和 .chars() 不适用于 std::io::Lines,但适用于字符串向量?

c++ - 定义模板类、运算符和迭代器的麻烦

c++ - 创建一个从字符串中删除特定字符的函数。我的程序有什么问题?