C++ 计数图

标签 c++ dictionary counting

最近我正在处理一个我确信是非常普遍的问题,它基本上可以归结为以下几点:

给定一个长文本,计算每个单词在文本中出现的频率。

我能够使用 std::unordered_map 解决这个问题。然而,这变得非常难看,对于文本中的每个单词,如果已经遇到过,我必须进行查找、删除,然后重新插入 map 并增加值。

我意识到还有其他方法可以做到这一点,例如在普通数组/vector 之上使用散列函数并在那里递增值,但我想知道是否有更优雅的方法来解决这个问题,比如STL 组件或函数。这将具有与 Pythons Counter 集合类似的界面。

我知道 C++ 就是 C++ 我真的不能指望总是为我实现如此高层次的概念,但我只是想知道你们是否对任何新事物(或者至少你们的谷歌搜索技能优于我的)可以使我的代码更好一些。

最佳答案

我不太确定为什么 std::unordered_map(或只是 std::map)会涉及很多复杂性。我会写这样的代码:

std::unordered_map<std::string, int> words;

std::string word;
while (word = getword(input))
   ++words[word];

不需要任何类型的查找/删除/重新插入。

如果不清楚它是如何/为什么工作的:operator[] 将为一个值创建一个条目(如果 map 中不存在)。关联值将是指定类型的值初始化对象,在 int(或类似)的情况下将为零。然后我们每次遇到这个词时都会增加它。

关于C++ 计数图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975810/

相关文章:

c++ - 从包含 IP header 片段的二进制文件中读取结构的最佳方法是什么?

c++ - 双向链表总是只包含 1 条记录

c++ - 将变量分配给数组的函数

过滤具有重叠日期的数据的 Pythonic 方法

c - While 循环未正确完成

javascript - 子字符串方法不返回最大字符限制

c++ - 我应该避免在 C++ 中使用#define 吗?为什么,我可以使用哪些替代方案?

python - 将 python 字典附加到 csv

python - 根据旧字典创建新字典

c - 计算单词的程序 c