C++ 当代码试图在STL映射中查找键时,为什么会出现分段错误?

C++ 当代码试图在STL映射中查找键时,为什么会出现分段错误?,c++,stl,segmentation-fault,C++,Stl,Segmentation Fault,给一个数组一个[]的整数。任务是显示有序的数据对 正整数(X,Y),使得X在[]中至少出现Y次 Y在A中至少出现X次 e、 g.inputA[]={1,1,2,2,3}——程序使用此输入运行良好。 有序对是->{[1,1],[1,2],[2,1],[2,2]} e、 输入:A={3,3,2,2,2}--程序因这个错误而崩溃 有序对是->{[3,2],[2,2],[2,3]} 在函数getDesiredSet()的下面几行,查找失败,出现分段错误 it1=freqMap.find(itr->fir

给一个数组一个[]的整数。任务是显示有序的数据对 正整数
(X,Y)
,使得X在[]中至少出现Y次 Y在A中至少出现X次

e、 g.input
A[]={1,1,2,2,3}
——程序使用此输入运行良好。 有序对是->
{[1,1],[1,2],[2,1],[2,2]}

e、 输入:A={3,3,2,2,2}--程序因这个错误而崩溃 有序对是->
{[3,2],[2,2],[2,3]}

在函数getDesiredSet()的下面几行,查找失败,出现分段错误

it1=freqMap.find(itr->first)
it2=freqMap.find(itr->second)

#包括“iostream”
#包括“地图”
#包括“迭代器”
#包括“集合”
使用名称空间std;
typedef对;
映射getFreqMap(int arr[],int n){
地图;地图;
对它进行迭代器;
对于(int i=0;isecond=freqMap.count(arr[i])+1;
freqMap[arr[i]=freqMap.count(arr[i])+1;
}
否则{
插入(对(arr[i],1));
}
}

cout擦除后,迭代器无效,但您将在下一个循环回合中使用它,如下所示:

for (itr = pairSet.begin(); itr != pairSet.end(); itr++){
    it1 = freqMap.find(itr->first);
    it2 = freqMap.find(itr->second);
    if ((it1->second < itr->second) || (it2->second < itr->first)){
        itrEnd = itr;
        std::advance(itrEnd , 1);
        pairSet.erase(itr, itrEnd); << itr is invalid now
    }
}
for(itr=pairSet.begin();itr!=pairSet.end();itr++){
it1=freqMap.find(itr->first);
it2=freqMap.find(itr->second);
如果((it1->secondsecond)| |(it2->secondfirst)){
itrEnd=itr;
标准:预付款(itrEnd,1);

pairSet.erase(itr,itrEnd);谢谢。我如何解决这个问题,因为我无法使用erase从映射中删除元素。请查看备注中给出的链接(可能重复),如果您仍然不理解,请再次询问我:)
for (itr = pairSet.begin(); itr != pairSet.end(); itr++){
    it1 = freqMap.find(itr->first);
    it2 = freqMap.find(itr->second);
    if ((it1->second < itr->second) || (it2->second < itr->first)){
        itrEnd = itr;
        std::advance(itrEnd , 1);
        pairSet.erase(itr, itrEnd); << itr is invalid now
    }
}