在C ++中创建自定义地图类时,如何在模板中定义和使用比较器

用户名

我正在使用数组创建一个类似于STL的容器。我坚持的一件事是如何实现模板的比较器对象

template <typename  K, typename V, typename KeyEqual = myEqualObject<K> >
class Map {
......
}

是否需要在类之外的所有方法主体上重复该模板头?IE

template <typename K, typename V >
V& Map<K,V>::operator[] (K key) {
...
}

应该

template <typename  K, typename V, typename KeyEqual = myEqualObject<K> >
V& Map<K,V>::operator[] (K key) {
...
}

另外,我还在努力使用/实现类中的这个额外对象,以检查两个键值是否相同。任何人都可以照亮吗?

我已经研究了这个主题,但是在这种情况下找不到任何示例

迈克·西摩

是否需要在类之外的所有方法主体上重复该模板头?

您需要所有模板参数,但无需重复默认参数:

template <typename K, typename V, typename KeyEqual>
V& Map<K,V,KeyEqual>::operator[] (K key) {
...
}

另外,我还在努力使用/实现类中的这个额外对象,以检查两个键值是否相同。

按照标准容器的示例,将比较器对象存储在(可能是私有的)成员变量中:

KeyEqual equal;

在构造函数中初始化它,允许用户提供一个:

Map(/* arguments, */ KeyEqual equal = KeyEqual()) : 
    // initialisers,
    equal(equal)
{
    // anything else
}

并将其用作二进制谓词:

if (equal(key1, key2)) {
    // treat them as equal
}

可以将其实现为二进制函数类:

template <typename K> struct myEqualObject {
    bool operator()(K const & k1, K const & k2) {return k1 == k2;}
};

尽管我将其std::equal_to<K>用作默认设置,而不是重写自己的版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用C ++中的自定义比较创建集合

来自分类Dev

如何在C ++中使用自定义比较器创建std :: set?

来自分类Dev

如何在C ++ 11中将std :: max与自定义比较器一起使用?

来自分类Dev

如何在C ++中设置Actor的“渲染自定义深度传递”和“深度模板值”?

来自分类Dev

如何在C ++中创建自定义整数序列

来自分类Dev

如何在C#中创建自定义事件

来自分类Dev

如何在(C#)中创建自定义光标

来自分类Dev

如何在C#中创建自定义事件

来自分类Dev

如何在C中创建自定义多个进程?

来自分类Dev

使用自定义列和自定义顺序在C#中创建datagrid的报告

来自分类Dev

Visual C:模板类中的自定义错误消息

来自分类Dev

在C ++类中构造自定义模板

来自分类Dev

C ++中的最小堆自定义比较器

来自分类Dev

有没有统一的方法在c ++中创建自定义比较器?

来自分类Dev

在C ++中创建自定义类的本机数组

来自分类Dev

在 C++ 中创建自定义类的多个实例

来自分类Dev

目标C:身份检查器中的自定义类创建该类的新对象?

来自分类Dev

目标C:身份检查器中的自定义类会创建该类的新对象?

来自分类Dev

WPF C#如何使用x:array在WPF中的自定义模型类中绑定和设置列表

来自分类Dev

如何在C#MVC5中的创建方法上将StudentProfileID和今天的Date结合为自定义ID

来自分类Dev

如何使用 OpenXml.Wordprocessing 和 C# 在 MS Word 中创建自定义样式链接(段落和字符)

来自分类Dev

使用C ++在Qt中创建自定义属性

来自分类Dev

使用C ++在Qt中创建自定义属性

来自分类Dev

如何在C#中检查自定义类数组的相等性?

来自分类Dev

如何在C#中检查自定义类数组的相等性?

来自分类Dev

如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

来自分类Dev

如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

来自分类Dev

如何在C中创建自定义数据包?

来自分类Dev

如何在C ++中从文件创建自定义QML元素?

Related 相关文章

  1. 1

    如何使用C ++中的自定义比较创建集合

  2. 2

    如何在C ++中使用自定义比较器创建std :: set?

  3. 3

    如何在C ++ 11中将std :: max与自定义比较器一起使用?

  4. 4

    如何在C ++中设置Actor的“渲染自定义深度传递”和“深度模板值”?

  5. 5

    如何在C ++中创建自定义整数序列

  6. 6

    如何在C#中创建自定义事件

  7. 7

    如何在(C#)中创建自定义光标

  8. 8

    如何在C#中创建自定义事件

  9. 9

    如何在C中创建自定义多个进程?

  10. 10

    使用自定义列和自定义顺序在C#中创建datagrid的报告

  11. 11

    Visual C:模板类中的自定义错误消息

  12. 12

    在C ++类中构造自定义模板

  13. 13

    C ++中的最小堆自定义比较器

  14. 14

    有没有统一的方法在c ++中创建自定义比较器?

  15. 15

    在C ++中创建自定义类的本机数组

  16. 16

    在 C++ 中创建自定义类的多个实例

  17. 17

    目标C:身份检查器中的自定义类创建该类的新对象?

  18. 18

    目标C:身份检查器中的自定义类会创建该类的新对象?

  19. 19

    WPF C#如何使用x:array在WPF中的自定义模型类中绑定和设置列表

  20. 20

    如何在C#MVC5中的创建方法上将StudentProfileID和今天的Date结合为自定义ID

  21. 21

    如何使用 OpenXml.Wordprocessing 和 C# 在 MS Word 中创建自定义样式链接(段落和字符)

  22. 22

    使用C ++在Qt中创建自定义属性

  23. 23

    使用C ++在Qt中创建自定义属性

  24. 24

    如何在C#中检查自定义类数组的相等性?

  25. 25

    如何在C#中检查自定义类数组的相等性?

  26. 26

    如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

  27. 27

    如何在C#中使用内联XAML轻松在代码隐藏中创建自定义对象

  28. 28

    如何在C中创建自定义数据包?

  29. 29

    如何在C ++中从文件创建自定义QML元素?

热门标签

归档