【发布时间】:2018-08-19 01:01:02
【问题描述】:
根据以下代码擦除元素的最佳方法是什么?在我可以擦除找到的最大数字之前,需要完成内部 for 循环。虽然“problem-with-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());
}
【问题讨论】:
-
你应该使用
test.erase(it)的返回值 -
在你之后
erase(it)it无效,后面的++it也是无效的。
标签: c++