C++ 多向哈希表
如果之前有人问过我,我会提前道歉。如果有,我不知道这个数据结构将被称为什么 我收集了N个(大约300个或更少)小部件。每个小部件有M个(大约10个)不同的名称。此集合将填充一次,然后进行多次查找。我将在C++中实现这个。 这方面的一个例子可能是200人的集合,并用7种不同的语言存储他们的姓名 查找功能基本上如下所示: 查找(“名称”,A,B),它将返回名称“名称”从语言A到语言B的翻译(仅当名称在集合中时) 文献中是否有任何已知的数据结构可以有效地完成这类工作?最明显的解决方案是为查找创建一组哈希表,但是为所有可能的对创建MxM哈希表会很快变得笨拙和内存效率低下。我也愿意考虑排序数组(二进制搜索),甚至树。由于收集量不大,所以日志(N)查找就可以了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的翻译(仅当名称在集合中时) 文献中是否有任何已知的数据结构可以有效地完成这类工作?最明显的解决方案是为查找创建一组哈
谢谢大家 根据您对所需查找函数的描述,听起来您可以使用一个哈希表,其中键是
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也可以做你想做的事。