C++ STL unique()算法如何实现长尾词的自动去重?
- 内容介绍
- 文章标签
- 相关推荐
本文共计735个文字,预计阅读时间需要3分钟。
unique()函数可以移除序列中的重复元素,要求处理的序列必须是正向迭代器。移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。
unique() 算法可以在序列中原地移除重复的元素,这就要求被处理的序列必须是正向迭代器所指定的。在移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。可以提供一个函数对象作为可选的第三个参数,这个参数会定义一个用来代替== 比较元素的方法。例如:std::vector<string> words {"one", "two", "two", "three", "two", "two", "two"}; auto end_iter = std::unique(std::begin(words), std::end(words)); std::copy(std::begin(words), end_iter, std::ostream_iterator<string>{std::cout, " "}); std::cout << std::endl; 这样会通过覆盖来消除 words 中的连续元素。输出为:
one two three two
当然,没有元素会从输入序列中移除;算法并没有方法去移除元素,因为它并不知道它们的具体上下文。整个序列仍然存在。本文共计735个文字,预计阅读时间需要3分钟。
unique()函数可以移除序列中的重复元素,要求处理的序列必须是正向迭代器。移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。
unique() 算法可以在序列中原地移除重复的元素,这就要求被处理的序列必须是正向迭代器所指定的。在移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。可以提供一个函数对象作为可选的第三个参数,这个参数会定义一个用来代替== 比较元素的方法。例如:std::vector<string> words {"one", "two", "two", "three", "two", "two", "two"}; auto end_iter = std::unique(std::begin(words), std::end(words)); std::copy(std::begin(words), end_iter, std::ostream_iterator<string>{std::cout, " "}); std::cout << std::endl; 这样会通过覆盖来消除 words 中的连续元素。输出为:
one two three two
当然,没有元素会从输入序列中移除;算法并没有方法去移除元素,因为它并不知道它们的具体上下文。整个序列仍然存在。
