我正在编写一个程序,它将使用查找表进行基本压缩。要创建表,我将读取一个文本文件(大小为2MB),然后找到255个最常用的单词并将它们存储到另一个文本文件中。我现在正在尝试使用一个向量,但运行时运行时间很慢,以便插入到向量中,对其进行排序,然后将前255个元素输出到另一个文本文件。插入似乎是有问题的,因为我必须检查它是否已经存在于向量内部,然后如果它存在则递增计数器,或者如果不存在则将元素添加到向量的末尾。我需要找到一种有效的方法,只有当元素不在数据结构中时才会将元素插入到数据结构中(无重复)。
答案 0 :(得分:0)
尝试使用STL map
或set
它比矢量快得多:请参阅here
答案 1 :(得分:0)
std::unordered_map
可能最适合您的目的,无法保证。当且仅当不存在时,您才可以添加密钥"只需使用operator[]
。
你将通过2MB分成单词并计算频率(每个单词的结构中一次查找)。然后使用std::partial_sort_copy
(采用比较器的版本)从unordered_map
开始按频率计数得到前255个。您应该partial_sort_copy
进入矢量或数组,然后使用它来编写文件。
对于2 MB的数据,几秒钟内的任何内容肯定都比它慢#34;应该"是的,几秒钟仍然比它慢。因此,你应该关注你的向量,但是你也应该对你的代码进行分析,以确保它真的是花费你时间的向量,而不是其他问题。