根据以下代码擦除元素的最佳方法是什么?在我可以删除找到的最大数字之前,内部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());
}
答案 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;