0

我有很多对象。每个对象都与许多键值对相关联。键是任意字符串(不同对象的键可能不同,并且没有可能键的完整列表),值可以是数字、字符串、日期时间等。

我需要使用复杂的搜索查询来搜索这个集合。在最简单的实现中,用户必须能够指定感兴趣的键列表和每个键值的条件,例如

key1: not present
key2: present
key3: == "value3"
key4: < 42
key5: contains "value5"

引擎必须找到满足所有条件的所有对象(即条件是“与”)。在完美的实现中,用户可以使用某种查询语言来指定条件,例如

key1 = "value1" AND (key2 < 3 OR key3 < 3)

我在 Windows 上使用 C++ 和 Qt(Linux 支持不是必需的,但很好)。我不想使用需要一些安装(尤其是具有管理员权限)的数据库,我希望解决方案是可移植的。

请提出一种从头开始实现此功能的好方法,或者使用任何满足我需求的库或数据库。

更新:问题是关于在磁盘上存储大量数据并快速搜索它。也许它也与解析和处理搜索查询有关。这与我需要用来表示内存中数据的数据结构无关。这很简单。

4

2 回答 2

1

如果它们的键是唯一的,请使用std::mapor (C++11) std::unordered_map

如果键不是唯一的,请使用std::multimapor (C++11) std::unordered_multimap

后者具有 O(1) 搜索和插入,但要求您提供高质量的散列算法(不容易制作)并可能在地图增长和缩小时重新散列地图。

搜索由容器提供。

序列化留给读者作为练习。

于 2013-06-07T11:24:31.777 回答
0
use Nested Maps like std::map<key1,std::map<key2,value>>....
于 2013-06-07T11:25:44.057 回答