我处理的文本文件非常多(大约10 ^ 5到10 ^ 6个文件)。在每次迭代中,我想选择一个随机数,并能够将关联文本文件的内容加载到缓冲区。
现在我的问题是用什么样的搜索技术来定位文件?
答案 0 :(得分:1)
如评论中所述,它取决于操作系统。据我所知,C标准甚至没有提到目录。
如果你想要一种有效的搜索技术,你必须自己实现它。如果你写了很多东西,你可以使用操作系统来实现它,通过目录层次结构进行查找,并且平均复杂度为O(n * log(n))。
如果主要是只读的,那么将文件放在一个文件中就会非常简单和快得多,将其视为虚拟文件系统并让您的应用程序使用您选择的任何搜索算法搜索它。速度来自较少的操作系统和文件系统调用。写作变得有点大问题,因为namespace mylib {
using exception_kind_t = unsigned;
enum ExceptionKind : exception_kind_t {
InvalidScale = 0,
NonExistentResource = 1,
Whatever = 2
};
template <exception_kind_t Kind>
class exception : public std::exception {
static const char*[] messages = {
"invalid scale",
"non-existent resource",
"whatever"
};
exception_kind_t kind() const { return Kind; }
virtual const char* what() const throw() {
return messages[Kind];
}
};
} // namespace mylib
在没有重大重定位或内存的情况下不能很好地进行插入。