C++ 多向哈希表

C++ 多向哈希表,c++,algorithm,data-structures,hashtable,binary-search-tree,C++,Algorithm,Data Structures,Hashtable,Binary Search Tree,如果之前有人问过我,我会提前道歉。如果有,我不知道这个数据结构将被称为什么 我收集了N个(大约300个或更少)小部件。每个小部件有M个(大约10个)不同的名称。此集合将填充一次,然后进行多次查找。我将在C++中实现这个。 这方面的一个例子可能是200人的集合,并用7种不同的语言存储他们的姓名 查找功能基本上如下所示: 查找(“名称”,A,B),它将返回名称“名称”从语言A到语言B的翻译(仅当名称在集合中时) 文献中是否有任何已知的数据结构可以有效地完成这类工作?最明显的解决方案是为查找创建一组哈

如果之前有人问过我,我会提前道歉。如果有,我不知道这个数据结构将被称为什么

我收集了N个(大约300个或更少)小部件。每个小部件有M个(大约10个)不同的名称。此集合将填充一次,然后进行多次查找。我将在C++中实现这个。 这方面的一个例子可能是200人的集合,并用7种不同的语言存储他们的姓名

查找功能基本上如下所示: 查找(“名称”,A,B),它将返回名称“名称”从语言A到语言B的翻译(仅当名称在集合中时)

文献中是否有任何已知的数据结构可以有效地完成这类工作?最明显的解决方案是为查找创建一组哈希表,但是为所有可能的对创建MxM哈希表会很快变得笨拙和内存效率低下。我也愿意考虑排序数组(二进制搜索),甚至树。由于收集量不大,所以日志(N)查找就可以了


谢谢大家

根据您对所需查找函数的描述,听起来您可以使用一个哈希表,其中键是
tuple
,值是转换的结果。键中的两种语言分别标识字符串的源语言和所需翻译的语言。

创建一个N×M数组D,这样
D[u,v]
就是小部件u的语言v中的单词

还要创建M个哈希表,H₀...Hₘ (其中m是m-1)使得
Hᵥ(w) .data
是u,如果w是v语言中小部件u的单词

执行
查找(w,r,s)

(1) 设置u=
Hᵣ(w) .数据


(2) 如果
D[u,r]
等于w,则返回
D[u,s]
,否则返回未找到。

Boost Intrusive将让您高效地创建一个多向哈希表。Boost Bimap也可以做你想做的事。