作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题,我希望你知道答案。我有一个通用的堆类。让我们称之为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/
我是一名优秀的程序员,十分优秀!