一个类用于集合和字典 (map)

one class for both a set and a dictionary (map)

本文关键字:字典 map 集合 一个 用于      更新时间:2023-10-16

我想实现哈希表和Ballanced-Binary-Tree(特别是AVL(,以满足集合字典(map(的需求。

对于第一个目的,

只有一个键类,对于第二个目的,有一个键和数据(或值(。

这两个版本共享很多功能(尤其是在树的情况下(,所以我真的不想实现两次:

template<class Key> class AVLTree;
template<class Key, class Val> class AVLTree;

如何优雅地创建一个"HashTable"类,分别创建一个"AVLTree"类,并将它们用于两个目的(可能的包装器/派生类[[Un]Ordered]"Set"和"Map"?

(不,我不想使用 STL(

谢谢

显而易见的答案是:按照STL的方式去做。

介绍您需要的最通用的AVLTree形式:

template <class K, class V, class KeyOfValue, class Compare>
class AVLTree;

(请参阅_Rb_tree_base作为参考(。在这种情况下,AVLTree只存储Value。但是出于比较值的原因,它能够通过KeyOfValue对象检索ValueKey

使用它,您的dictionary应用程序是显而易见的。然后,可以通过对KeyValue使用相同的类型以及KeyOfValue的标识来对set进行建模。(可能你不想每次都说清楚。只需为此使用包装器模板即可。