Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建一个接受比较器的类(对于最大堆和最小堆)?_C++_Comparator - Fatal编程技术网

C++ 如何创建一个接受比较器的类(对于最大堆和最小堆)?

C++ 如何创建一个接受比较器的类(对于最大堆和最小堆)?,c++,comparator,C++,Comparator,为了进一步了解堆,我实现了自己的MaxHeap类。我已经测试过了,效果很好。现在,我想创建一个MinHeap。这两个(MaxHeap和MinHeap)之间唯一不同的是比较(即更改为>=)。那么,我怎样才能重新设计我的课堂,使之双向运作呢?我想到的是,在创建对象时传递比较函数。这是最好的办法吗?如果是这样,我该怎么做呢?我甚至不知道搜索我正在寻找的内容的正确关键字。请解释一下这样一个类的设计,并给我指一些教程。谢谢 按照标准库的操作,将比较器作为模板参数: template <typenam

为了进一步了解堆,我实现了自己的MaxHeap类。我已经测试过了,效果很好。现在,我想创建一个MinHeap。这两个(MaxHeap和MinHeap)之间唯一不同的是比较(即更改为>=)。那么,我怎样才能重新设计我的课堂,使之双向运作呢?我想到的是,在创建对象时传递比较函数。这是最好的办法吗?如果是这样,我该怎么做呢?我甚至不知道搜索我正在寻找的内容的正确关键字。请解释一下这样一个类的设计,并给我指一些教程。谢谢

按照标准库的操作,将比较器作为模板参数:

template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
    SWOComp compare;
public:
    explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
    // ...
};
模板
类MyHeap
{
SWOComp比较;
公众:
显式MyHeap(SWOComp c=SWOComp()):比较(c){
// ...
};
然后,当需要比较两个元素
a
b
时,使用
compare(a,b)


要实例化一个普通函数,
请按照标准库的操作,并将比较器作为模板参数:

template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
    SWOComp compare;
public:
    explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
    // ...
};
模板
类MyHeap
{
SWOComp比较;
公众:
显式MyHeap(SWOComp c=SWOComp()):比较(c){
// ...
};
然后,当需要比较两个元素
a
b
时,使用
compare(a,b)


要实例化普通的,
=
不是严格弱序。
=
不是严格弱序。