如何利用unordered_map高效统计文本单词频率?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1061个文字,预计阅读时间需要5分钟。
直接使用 `std::unordered_map` 存储单词和频率,是 C++ 中实现简洁性与性能首选。它不排序、平均插入/查找时间复杂度为 O(1),比 `std::map` 快得多,尤其在文本包含数千个不同单词时差异明显。
但别光图快——std::unordered_map 的键必须可哈希,std::string 已内置支持,不用额外写哈希函数;若你用自定义结构体当键,就得自己提供 std::hash 特化或传入哈希仿函数。
- 头文件必须加:
#include <unordered_map> - 声明方式:
std::unordered_map<:string int> word_count;</:string> - 计数只需一行:
word_count[cleaned_word]++;(自动初始化为 0 再加 1) - 注意:空字符串
""也会被当作有效键存进去,后续遍历时得跳过
清洗单词比选容器更关键
绝大多数词频不准,不是因为用了 map 还是 unordered_map,而是单词没洗干净。比如 "Hello!"、"hello"、"HELLO" 默认会被算作三个不同单词。
本文共计1061个文字,预计阅读时间需要5分钟。
直接使用 `std::unordered_map` 存储单词和频率,是 C++ 中实现简洁性与性能首选。它不排序、平均插入/查找时间复杂度为 O(1),比 `std::map` 快得多,尤其在文本包含数千个不同单词时差异明显。
但别光图快——std::unordered_map 的键必须可哈希,std::string 已内置支持,不用额外写哈希函数;若你用自定义结构体当键,就得自己提供 std::hash 特化或传入哈希仿函数。
- 头文件必须加:
#include <unordered_map> - 声明方式:
std::unordered_map<:string int> word_count;</:string> - 计数只需一行:
word_count[cleaned_word]++;(自动初始化为 0 再加 1) - 注意:空字符串
""也会被当作有效键存进去,后续遍历时得跳过
清洗单词比选容器更关键
绝大多数词频不准,不是因为用了 map 还是 unordered_map,而是单词没洗干净。比如 "Hello!"、"hello"、"HELLO" 默认会被算作三个不同单词。

