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

fastest way to convert a file to list c++

本文关键字:方法 c++ 列表 文件 转换      更新时间:2023-10-16

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

     1
     4
     45
     150
     245
     365

我知道可以逐行读取和pushback,但文件数超过了500000行,所以他们是一种快速的方法吗?

目标是查看文件中是否有整数,因此我需要转换为list,然后进行binarysearch,如果您有更好的想法,我将不胜感激。

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

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

如果您想多次搜索,我建议将文件内容放入哈希表中。这将为您提供最佳的O(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
}