创建索引创建类

时间:2009-06-22 17:01:07

标签: c++ binary indexing ascii

我正忙着编写一个用文本文件ASCII / BINARY创建索引的类。 我的问题是我真的不知道如何开始。我已经有一些尝试,但没有一个真正适合我。 我不需要通过MFT找到文件的地址。只需加载文件并通过在索引文件中搜索密钥并将文本文件转到它显示的地址来更快地查找内容。

索引文件应按如下方式构建:

KEY        ADDRESS  
  1        0xABCDEF    
  2        0xFEDCBA    
  .           .  
  .           .  

我们有一个文本文件,其中包含以下示例值:

1, 8752 FW,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------;

我希望这能更好地解释我的问题。 谢谢!

3 个答案:

答案 0 :(得分:1)

您的代码段不是一个想法,因为它最终是您希望拥有的功能。

认识到“索引”仅仅意味着“记住”事物的位置。您可以使用您希望的任何数据结构来完成此操作... B树,红/黑树,BST或更高级的结构,如后缀树/后缀数组。

我建议你研究一下这样的数据结构。

编辑:

使用新信息,我建议您自己进行键/值查找。构建一个键数组,并以某种方式关联它们的值。这可能意味着构建一个包含键和值的类或结构,或者包含键和指向带有值的结构或类的指针等。

完成此操作后,对键阵列进行排序。现在,您可以对键进行二进制搜索,以找到给定键的适当值。

您可以以类似的方式构建哈希表。你可以像我前面提到的那样建立一个BST或类似的结构。

答案 1 :(得分:1)

在我看来,你的所有类需要做的是将一个指针数组或文件起始偏移量存储到文件中的关键位置。

这实际上取决于您的密钥位置代表什么。

我建议您使用一些公共方法通过您的类访问该文件。然后,您可以更轻松地将密钥位置与写入的数据联系起来。

例如,您的密钥位置可能是写入文件的每个新数据块的起始位置。例如第一块1000字节,密钥位置0;第二块2500字节,密钥位置1000;第三块550字节;关键位置3500;假设0是第一个字节,下一个块将是4050。

将Key值存储在可变长度数组中,然后您可以轻松检索数据块的起始点。

如果您的关键点由某个关键字符表示,那么您可以使用相同的类,但稍微更改以存储Key值的存储位置。最简单的方法是逐步执行数据,直到找到关键字符,计算出去的字符数。然后,计数用于生成您的关键位置。

答案 2 :(得分:0)

我仍然不太明白这个问题(关于你问技巧的问题),但据我所知算法将是:

  1. 线性扫描文件,第一个逗号(',')的第一个值可能是一个键。所有其他键都出现在';'的任何地方发生,直到下一个','(你可能需要在这里跳过换行符)。如果是家庭作业,只需使用scanf()或其他东西来读取密钥。
  2. 将您找到的密钥和字节位置打印到索引文件
  3. AFAIUI是算法,我真的没有在这里看到问题吗?