【发布时间】:2016-09-29 09:29:03
【问题描述】:
所以我需要在文件中找到一些最常用的词。
我有一个vector<pair<string, int> > wordList,它跟踪文件中的每个单词及其频率。这部分工作正常。
问题是,输出显示每个单词的多个版本。这是因为我的计算方式是:
- 将所有单词加载到频率为 1 的向量中
- 再过一遍,如果这个词出现两次,增加它的计数
-
我需要帮助的部分是删除同一个单词的多个条目。
for(int j = 0; j < wordList.size(); j++) {
这是我目前的方法。此功能汇总了所有单词。问题在于 for 循环内的行 wordList.erase
产生越界错误,所以我不能以这种方式删除重复的条目。
我也尝试了 unique() 方法,但这似乎不起作用,它只会删除一些条目。
将成对向量减少为唯一元素的最有效方法是什么?
【问题讨论】:
-
你熟悉
std::map吗? -
是的,但是我需要按降序打印此列表,如果我没记错的话,地图无法根据其中的某些值进行排序。我错了吗?
-
当您从循环内的向量中删除元素时,您必须考虑到大小正在发生变化。如果你删除元素 i 那么下一个元素不是 i+1 而是 i.
-
地图是按键排序的,你是对的。我不知道您还有什么其他要求,但我会考虑构建地图
,然后将其转录为地图 以进行打印。 -
A
std::map不存储重复键。这些词是地图中的key元素。就像mymap["the_word"]++;将检测到“the_word”的次数加 1 一样简单。如果已经有一个带有键"the_word"的条目,它不会将另一个条目添加到地图中。