我有一个完整的整数文件,已排序,我需要将文件的内容放到列表中。 该文件看起来像这样:
1
4
45
150
245
365
我知道可以逐行读取和推送,但文件数超过500 000行,那么他们是否可以快速完成此操作?
目标是查看文件中是否有整数,所以我需要转换为list然后再进行binary_search,如果你有更好的想法,我会感激不尽。
答案 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
}