什么数据结构最快插入和搜索元素?

时间:2014-04-16 21:28:54

标签: c++

我正在编写一个程序,它将使用查找表进行基本压缩。要创建表,我将读取一个文本文件(大小为2MB),然后找到255个最常用的单词并将它们存储到另一个文本文件中。我现在正在尝试使用一个向量,但运行时运行时间很慢,以便插入到向量中,对其进行排序,然后将前255个元素输出到另一个文本文件。插入似乎是有问题的,因为我必须检查它是否已经存在于向量内部,然后如果它存在则递增计数器,或者如果不存在则将元素添加到向量的末尾。我需要找到一种有效的方法,只有当元素不在数据结构中时才会将元素插入到数据结构中(无重复)。

2 个答案:

答案 0 :(得分:0)

尝试使用STL mapset它比矢量快得多:请参阅here

答案 1 :(得分:0)

std::unordered_map 可能最适合您的目的,无法保证。当且仅当不存在时,您才可以添加密钥"只需使用operator[]

你将通过2MB分成单词并计算频率(每个单词的结构中一次查找)。然后使用std::partial_sort_copy(采用比较器的版本)从unordered_map开始按频率计数得到前255个。您应该partial_sort_copy进入矢量或数组,然后使用它来编写文件。

对于2 MB的数据,几秒钟内的任何内容肯定都比它慢#34;应该"是的,几秒钟仍然比它慢。因此,你应该关注你的向量,但是你也应该对你的代码进行分析,以确保它真的是花费你时间的向量,而不是其他问题。