Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的类多ap结构+;使用类似数据库的查找 我想找到(或实现)C++中的一种结构,它将多个项目映射到一个键(如MultMap),但是可以用多个“和”键(比如数据库)查询。为了便于讨论,我将其称为查询映射。我的问题是:这样的事情存在吗?如果没有,您对实施有何建议_C++_Data Structures_Multimap - Fatal编程技术网

C+中的类多ap结构+;使用类似数据库的查找 我想找到(或实现)C++中的一种结构,它将多个项目映射到一个键(如MultMap),但是可以用多个“和”键(比如数据库)查询。为了便于讨论,我将其称为查询映射。我的问题是:这样的事情存在吗?如果没有,您对实施有何建议

C+中的类多ap结构+;使用类似数据库的查找 我想找到(或实现)C++中的一种结构,它将多个项目映射到一个键(如MultMap),但是可以用多个“和”键(比如数据库)查询。为了便于讨论,我将其称为查询映射。我的问题是:这样的事情存在吗?如果没有,您对实施有何建议,c++,data-structures,multimap,C++,Data Structures,Multimap,这里有一个例子来澄清这个概念。假设我有以下数据: Key-1 Key-2 Key-3 Value 'a' 'A' 'a' 'B' 'a' 'b' 'C' 'b' 'D' 'b' 'c' 'E' 'a' 'b' 'c' 'F' 按照STL多重映射的语法,这些数据可以存储在一个理论

这里有一个例子来澄清这个概念。假设我有以下数据:

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'));
到目前为止,这正是多重映射的行为。我目前设想的querymap将扩展查找函数,以返回一个迭代器,该迭代器用于由所有键集设置键的所有项。我提出了以下语法,这可以通过使用变量参数列表来实现

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

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

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

我在一个实现中的第一个想法是一个结构,它将在内部存储一个由一个集合键控的映射,并带有一个自定义比较函数,该函数将右侧集合计数为等于其左侧子集(必须是非对称比较,以便大型查询集不会返回其所有子集)

设置自定义比较函数的另一种方法是使用多重映射,并通过与之相关联的每一组可能的键对条目进行键控


这两种解决方案对我来说都不理想。有什么想法吗?

集装箱怎么样?你可以做你想做的。谢谢卡尔!这看起来和我想要的非常接近(如果不是完全的话)。我不知道我在寻找解决方案时怎么会错过它。事实上,我有机会查看了boost复合键,它们很接近,但不是我想要的。我需要能够通过可变数量的列进行键控,所有列都是相同的类型,而不是固定数量的各种类型的列。还是谢谢你:)
qm.find('a', 'b');
>>> 'C', 'F'

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

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