需要以下行为的帮助:
我创建了 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;
    }

最佳答案


它不“起作用”。
该程序的行为是不确定的。

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

09-10 00:58
查看更多