C ++中的Multiap-like结构,具有类似数据库的查找

时间:2014-03-14 01:24:43

标签: c++ data-structures multimap

我想在C ++中找到(或实现)一个结构,它将多个项目映射到一个键(如多图),但可以用多个"和-ed"来查询。键(如数据库)。为了便于讨论,我将其称为查询映射。我的问题是:这样的事情存在吗?如果没有,您对实施有什么建议吗?


以下是澄清这一概念的一个例子。说我有以下数据:

Key-1   Key-2   Key-3   Value
'a'                     'A'
'a'                     'B'
'a'     'b'             'C'
'b'                     'D'
'b'     'c'             'E'
'a'     'b'     'c'     'F'

遵循STL多图的语法,这些数据可以存储在理论上的查询图中,如此

querymap<char, char> qm;
qm.insert(pair<char, char>('a', 'A'));
qm.insert(pair<char, char>('a', 'B'));
qm.insert(pair<char, char>('a', 'C'));
qm.insert(pair<char, char>('b', 'C'));
qm.insert(pair<char, char>('b', 'D'));
qm.insert(pair<char, char>('b', 'E'));
qm.insert(pair<char, char>('c', 'E'));
qm.insert(pair<char, char>('a', 'F'));
qm.insert(pair<char, char>('b', 'F'));
qm.insert(pair<char, char>('c', 'F'));

然后,要检索由key键键入的所有元素,请调用find(key),它将返回这些元素的迭代器。

qm.find('a');
>>> 'A', 'B', 'C', 'F'

qm.find('b');
>>> 'C', 'D', 'E', 'F'

qm.find('c');
>>> 'E', 'F'

到目前为止,这正是多图的行为。我目前设想的一个查询映射会扩展查找函数,以返回所有 set 键所键入的项的迭代器。我提出了以下语法,可以通过使用变量参数列表来实现。

qm.find('a', 'b');
>>> 'C', 'F'

qm.find('b', 'c');
>>> 'E', 'F'

qm.find('a', 'b', 'c');
>>> 'F'

我在实现中的第一个想法是一个结构,它将在内部存储一个由一个集合键入的地图,并带有一个自定义比较函数,该函数将右手集等同于它们的左手子集(必须是非对称比较,所以大型查询集不会返回所有子集。

设置自定义比较函数的替代方法是使用多图并使用与之关联的每个可能键集键入一个条目。

这些解决方案对我来说都不合适。有什么想法吗?

0 个答案:

没有答案