C++ 在排序文本文件中实现二进制搜索?
有没有一种方法可以代替直接复制文件中的数据在其中实现搜索?理论上:是的,但效率很低C++ 在排序文本文件中实现二进制搜索?,c++,file,search,C++,File,Search,有没有一种方法可以代替直接复制文件中的数据在其中实现搜索?理论上:是的,但效率很低 我建议将数据放在sqlite数据库中,这样您仍然有一个文件,但可以很好地查询/搜索条目;医生:是的,但通常不值得 您忽略了提及文本文件的排序方式,以及是否有转义字符、引号、多个八位字符等-这些都会影响答案 但让我们做以下假设: 纯打印ASCII文本,每个字符串中没有换行符 换行符(即0xA字符)分隔字符串 对于一组假设来说,这仍然是不够的,因为-也许有些字符串比其他字符串长得多?事实上,如果不是n个字符串的极
我建议将数据放在sqlite数据库中,这样您仍然有一个文件,但可以很好地查询/搜索条目;医生:是的,但通常不值得 您忽略了提及文本文件的排序方式,以及是否有转义字符、引号、多个八位字符等-这些都会影响答案 但让我们做以下假设:
- 纯打印ASCII文本,每个字符串中没有换行符
- 换行符(即0xA字符)分隔字符串
- 您知道最小和最大字符串长度
- 最小长度与最大长度的比值R不是很高
因此,正如您所看到的,二进制搜索有相当大的开销。它可能还是值得的。你的文件相对于Min、马克斯、R和B确实非常大,所以在一个几千兆字节的文件中,我当然会考虑它。否则-可能不值得麻烦。简短回答-是的,不是真的-二进制搜索需要随机访问,并且您无法有效地对文本文件(即由可变长度行组成的文件)执行随机访问。@NeilButterworth您可以扫描最近的回车,或者文件可能包含固定长度的记录。@NeilButterworth您可以对文件的数据执行随机访问。随机访问是否有意义取决于文件格式。@Francois,这就是我说“有效”的原因。