map .erase不会删除元素

时间:2018-03-10 15:49:22

标签: c++

根据以下代码擦除元素的最佳方法是什么?在我可以删除找到的最大数字之前,内部for循环需要完成。虽然"问题与stdmapiterator-after-calling-erase"解释擦除如何工作,我似乎无法使其工作。基于以下代码的示例将不胜感激。

map<string,int> test;
void sort_print()
{
    int biggestNum = 0;
    string word;

    for(int i = 0; i < WORDS_TO_FIND; i++)
    {
        for(auto it = test.begin(); it != test.end(); ++it )
        {
            if (it->second > biggestNum)
            {
                biggestNum = it->second;
                word = it->first;
            }

        }
        test.erase(word);
        cout << word + ": " << biggestNum << endl;
    }
}

有趣的是,当我去main时(在从上面的函数中删除第一个循环并执行以下操作之后...然后它可以工作但是为什么?:

for(int i = 0; i < WORDS_TO_FIND; i++)
{
    test.erase(sort_print());
}

1 个答案:

答案 0 :(得分:0)

如果你想要做的就是擦除值最高的地图元素:

map<string, int> test;

void sort_print()
{
    int biggestNum = 0;
    string word;

    for (auto it = test.begin(); it != test.end(); it++)
    {
        if (it->second > biggestNum)
        {
            word = it->first;
        }
    }
    cout << word + ": " << biggestNum << endl;
    test.erase(word);
}

不需要两个循环,也不需要:

biggestNum = it->second;