将文件转换为列表c ++的最快方法

时间:2014-04-26 19:34:20

标签: c++ algorithm list binary-search

我有一个完整的整数文件,已排序,我需要将文件的内容放到列表中。 该文件看起来像这样:

     1
     4
     45
     150
     245
     365

我知道可以逐行读取和推送,但文件数超过500 000行,那么他们是否可以快速完成此操作?

目标是查看文件中是否有整数,所以我需要转换为list然后再进行binary_search,如果你有更好的想法,我会感激不尽。

3 个答案:

答案 0 :(得分:2)

要阅读列表,您可以使用std::istreambuf_iterator

std::ifstream t( "file.txt");
std::list<int> l( ( std::istreambuf_iterator<int>( t)),
                     std::istreambuf_iterator<int>());

答案 1 :(得分:1)

如果您想多次搜索,我建议将文件内容放入哈希表中。这为您提供了最佳的O(1)查找。

答案 2 :(得分:1)

我会这样做:

#include <iostream>
#include <iterator>
#include <unordered_set>

int main() {
  std::ifstream t { "file.txt", ios::ate };
  std::unordered_set s;
  s.reserve(t.tellg());
  t.seekg(0);
  s.insert(std::istream_iterator<int>(t), std::istream_iterator<int>());
// now you can use s.find(key) to see if something is in the set
}