一个类用于集合和字典 (map)
one class for both a set and a dictionary (map)
我想实现哈希表和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
对象检索Value
的Key
。
使用它,您的dictionary
应用程序是显而易见的。然后,可以通过对Key
和Value
使用相同的类型以及KeyOfValue
的标识来对set
进行建模。(可能你不想每次都说清楚。只需为此使用包装器模板即可。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- C++中的MSD基排序(字典序)
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 与C++std::map::insert行为相比,C#排序字典的效率
- 如何将返回的 Python 字典转换为 C++ std::map<string,string>
- 为什么 std::map 插入与 c# 字典插入相比如此缓慢
- 一个类用于集合和字典 (map)
- C++ std::map::find to C# 字典<键,val>
- 为什么在打印Un_ordered Map and Map(字典)的密钥和值时存在异常
- 为什么python的字典是作为哈希表实现的,而std::map是基于树的?
- Std::map与自编写的基于Std::vector的字典
- 快速c++简化map字典一样的集合