如何在main中重载运算符>泛型类.cpp
How to overload operator> for a generic class in main.cpp
我有一个问题,希望你知道答案。我有一个通用堆类。让我们称之为CHeap。在这个类中,由于堆的性质,我需要比较组件(例如Heap[i]>Heap[j]
)。这里Heap是数组。
如果我在main.cpp:中定义这样的变量
cHeap <int> myHeap;
那么我就没有问题了。但如果我有一个数据结构,让我们说:
struct S{
int data;
int code;
}
我定义:
cHeap <S> myHeap;
那我就有问题了。例如,我希望对代码值进行比较。换句话说:Heap[i].code>Heap[j].code
但是,正如我之前所说,这是一个泛型类,我不想在我的代码中(在我的CHeap类中)使用它。我是否可以在我的main.cpp中为CHeap重载运算符>?换句话说,拥有:
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; }
}
您可以定义S::operator>()
重载(这是一种常见的做法)
struct S
{
int data;
int code;
bool operator>(const struct S & aux) const
{
return this->code > aux.code;
}
};
所以,你可以使用它:
if (Heap[i] >Heap[j])
{
......
}
相关文章:
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 如何在 C++ 中声明泛型类
- 在C++中分配泛型类
- 基于变量输入的泛型类方法计算
- C++处理取消引用语法的泛型类
- 用于重载的泛型类成员函数
- 将类型作为指向另一个类的对象的指针的泛型类-NOT WORKING
- 在泛型类中使用带有 CUDA 关键字的模板类
- 在类中使用泛型类成员
- 如何在main中重载运算符>泛型类.cpp
- C++泛型类中的字段/属性
- 用返回子类的方法设计C++泛型类
- C++ 堆栈泛型类,int 变量将 32765 作为值而不是 1
- 将资源移出泛型类
- C++中的泛型类
- 可以在泛型类中为一种类型提供一个可用的函数
- 如何在C++中从泛型类创建对象
- 用泛型类指针作为参数声明函数指针的正确语法是什么
- 使用具有结构成员的泛型类时发生c++编译器错误