C++ 找到合适的数据存储和搜索引擎

C++ 找到合适的数据存储和搜索引擎,c++,qt,search,nosql,key-value,C++,Qt,Search,Nosql,Key Value,我有很多东西。每个对象都有许多键值对。键是任意字符串(不同对象的键可能不同,并且没有可能的键的完整列表),值可以是数字、字符串、日期时间等 我需要使用复杂的搜索查询来搜索此集合。在最简单的实现中,用户必须能够指定感兴趣的键的列表和每个键的值的条件,例如 key1: not present key2: present key3: == "value3" key4: < 42 key5: contains "value5" key1:不存在 关键2:现在 键3:=“值3” 键4:

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

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

key1: not present
key2: present
key3: == "value3"
key4: < 42
key5: contains "value5"
key1:不存在
关键2:现在
键3:=“值3”
键4:<42
键5:包含“value5”
发动机必须找到满足所有条件(即条件为和)的所有对象。在完美的实现中,用户可以使用某种查询语言指定条件,例如

key1 = "value1" AND (key2 < 3 OR key3 < 3)
key1=“value1”和(key2<3或key3<3)
我在Windows上使用Qt和C++(Linux支持不是必须的,但很好)。我不想使用需要安装的数据库(特别是具有管理员权限的数据库),我希望解决方案是可移植的

请建议一个很好的方法来实现这一点从头开始,或使用任何图书馆或数据库,以满足我的需要


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

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

如果键不唯一,请使用
std::multimap
或(C++11)
std::unordered\u multimap

后者有O(1)搜索和插入,但需要提供一个高质量的散列算法(不容易制作),并可能在映射增长和收缩时重新散列

搜索由容器提供

序列化留给读者作为练习

使用嵌套映射,如std::map。。。。
use Nested Maps like std::map<key1,std::map<key2,value>>....

有很多数据。将其全部加载到内存中需要一些时间。但是,这之后的查找将很快。你认为这是最好的选择吗?是否有任何技术可以在不加载内存中所有数据的情况下提供快速查找?确保在搜索密钥时可以转到磁盘并跳过。抱歉,这超出了你的问题范围。看看Knuth的《计算机编程的艺术》。这并没有超出我的问题范围,这是我试图在我的问题中提出的问题。这方面最简单的实现将过于缓慢。我在找能加快搜索速度的东西。