小编fva*_*nee的帖子

键值映射中的部分查找,其中键本身是键值映射

假设我们有一个数据结构,它是一个键值映射,其中键本身也是一个键值映射.例如:

map<map<string,string>>, string>
Run Code Online (Sandbox Code Playgroud)

现在,假设我们要查询此映射中与键的键值的某个子集匹配的所有顶级键/值.例:

map = { { "k1" : "v1", "k2 : "v2" } : "value1",
  { "k1" : "v3", "k2 : "v4" } : "value2",
  { "k1" : "v1", "k2 : "v5" } : "value3"
}
Run Code Online (Sandbox Code Playgroud)

我们的查询是"给我所有key-values,其中key包含{ "k1" : "v1" },它将返回第一个和第三个值.同样,查询{ "k1" : "v3", "k2" : "v4" }将返回所有具有两个k1=v3和的键值,并k2=v4产生第二个值.显然我们可以搜索关于每个查询的完整地图,但我正在寻找比这更有效的东西.

我环顾四周,但找不到一个高效,易用的C++解决方案.在查询键值对的子集时,Boost multi_index似乎没有这种灵活性.

有些数据库有办法创建可以完全回答这类查询的索引.例如,Postgres有GIN指数(广义倒排索引),可以让你问

SELECT * FROM table WHERE some_json_column @> '{"k1":"v1","k2":"v2"}'
-- returns all rows that have both k1=v1 and k2=v2
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找一种只在C++中没有数据库的解决方案.是否有任何库或数据结构可以完成这样的事情?如果没有,有关自定义实现的一些指示?

c++ algorithm stl data-structures

6
推荐指数
1
解决办法
197
查看次数

标签 统计

algorithm ×1

c++ ×1

data-structures ×1

stl ×1