在priority_queue的自定义类中重载比较运算符
Overloading comparison operators in custom class for priority_queue
我正在尝试使用priority_queue创建一个"number"的最小堆。"数字"是我定义的一个类,它有三个私有变量:
int value; //This holds the value to be read in the heap
vector<int> list; //This holds the vector where the value is gotten from
size_t index; //This holds the index of the vector that is referenced
我在这里唯一关心的私人变量是"价值">
我使<和>运算符作为priority_queue的先决条件(我认为两者都做太过分了,但我在这里学习(:
bool operator <(const number &x) {
return (value < x.value);
}
bool operator >(const number &x) {
return (value > x.value);
}
我的优先级队列声明在这里:
priority_queue<number, vector<number>, greater<number>> heap;
每当我试图编译我的程序时,我都会收到以下错误:
c:mingwlibgccmingw326.3.0includec++bitsstl_function.h:376:20: error: no match for
'operator>'
(operand types are 'const number' and 'const number')
{ return __x > __y; }
~~~~^~~~~
In file included from main.cpp:18:0:
number.h:59:7: note: candidate: bool number::operator>(const number&) <near match>
bool operator >(const number &x) {
^~~~~~~~
我不明白为什么编译器不能使用"number"类中重载的>运算符。有人知道为什么会发生这种错误吗?此外,我不确定是否需要发布更多的代码来解决这个问题,因为我是使用priority_queue的新手。如果我知道,请告诉我。
我在评论中被告知,我需要在运算符后面添加一个const。
bool operator <(const number &x) const {
return (value < x.value);
}
bool operator >(const number &x) const {
return (value > x.value);
}
相关文章:
- 不能将重载比较运算符与 Catch 测试一起使用
- 在priority_queue的自定义类中重载比较运算符
- C++ 中的运算符重载(比较运算符)
- 重载比较符号"<"时,C++升序排序的正确方法
- 重载比较运算符 == C++
- 重载比较运算符 C++,如何与 const 参数进行比较
- 重载比较运算符
- 此代码对于重载比较运算符是否正确
- 无法弄清楚为什么使用重载比较运算符在执行前调用复制构造函数
- 堆栈的重载比较运算符
- 特定积分常数的重载比较
- 重载比较运算符以使用C++中的STL排序
- 在C++中使用运算符重载比较哪个字符串更大
- 对double进行重载比较以允许出现数字错误
- 在c++中编写两个基本类型之间的重载比较(==)
- 重载比较运算符的使用>C++与 getter 函数结合使用
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型
- 不能使用操作符重载比较const和非const模板类型
- 如何用矩阵类重载比较运算符
- 重载比较运算符C++会导致"invalid operator<"