c++ - 如何为 main.cpp 中的泛型类重载 operator>

标签 c++ overloading operator-keyword

我有一个问题,我希望你知道答案。我有一个通用的堆类。让我们称之为CHeap。在这个类中,由于堆的性质,我需要比较组件(例如 Heap[i]>Heap[j])。这里的 Heap 是一个array

如果我在我的 main.cpp 中定义这样的变量:

cHeap <int> myHeap;

那我就没问题了。但是如果我有一个数据结构,比方说:

struct S{
 int data;
 int code;
}

我定义:

cHeap <S> myHeap;

那我有问题了。例如,我希望对 code 值进行比较。换句话说:Heap[i].code>Heap[j].code

但是,正如我之前所说,这是一个通用类,我不想在我的代码中使用它(在我的 CHeap 类中)。无论如何,我可以在我的 main.h 中为 CHeap 重载 operator> 吗? cpp? 换句话说:

bool operator>(const S& s1, const s& s2){
    return s1.code > s2.code;
}

在我的 main.cpp 中并将其链接到 CHeap 类?

类似于我们在使用 STL 的 *priority_queue* 时所做的事情:

priority_queue <S, vector <S>, greater <S> > myPQ;

bool operator>(const S& s1, const s& s2){
    return s1.code > s2.code;
}

?!

谢谢

最佳答案

您可以在S 结构中编写operator>

struct S{
 int data;
 int code;

 bool operator>(const S& other) { ... }
}

您还可以将另一个模板参数添加到您的 CHeap 类,它将比较两个 Type:

template<typename T, typename Compare> 
class CHeap
{
    Compare comparer;
};

要与值进行比较,请使用 comparer:

if(comparer(object1, object2)) {} // If object1 is greater than object2

然后像这样写你的Compare参数:

class SComparer
{
public:
    bool operator()(const S& s1, const s& s2) const { return s1.code > s2.code; }
}

关于c++ - 如何为 main.cpp 中的泛型类重载 operator>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20627499/

相关文章:

c++ - 重载括号运算符 [] 以获取和设置

function - dart 是否支持运算符重载

java - 三元运算符中的多个条件

c++ - GTK+ 3 native 文件选择器 - 允许的文件类型和默认文件名

c++ - 重载前模板实例化错误

c++ - boost::asio 和同步读取导致编译错误

c++ - 使用 float 给出 "call to overloaded function is ambiguous"错误

c++ - 错误 C2228 : left of '.values' must have class/struct/union

c++ - 我可以将 move 的变量标记为不再可用,并在使用它时收到编译器警告吗?

c++ - Qt C++编译完成,程序不显示