我正面临“二进制'<':没有发现哪个运算符采用'const Baloons'类型的左手操作数(或者没有可接受的转换)”错误,我找不到任何解决方案?
我还想问一下如何通过baloon.end订购优先级队列?
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Baloons
{
public:
float start;
float end;
public:
Baloons() {}
Baloons(float start, float end) : start{ start }, end{ end } {}
};
int main()
{
Baloons baloon1(1, 5);
Baloons baloon2(4, 7);
Baloons baloon3(6, 9);
Baloons baloon4(11, 12);
std::priority_queue<Baloons> myBaloons;
myBaloons.push(baloon1);
myBaloons.push(baloon2);
myBaloons.push(baloon3);
myBaloons.push(baloon4);
while (!myBaloons.empty())
{
Baloons b = myBaloons.top();
cout << b.start << " -> " << b.end << " ";
myBaloons.pop();
}
system("pause");
return 0;
}
答案 0 :(得分:1)
您需要向气球类添加operator<
,例如:
bool operator<(const Baloons& rhs) const {
return std::make_pair(start,end) < std::make_pair(rhs.start,rhs.end);
}
它将用于订购集合中的元素
答案 1 :(得分:0)
优先级队列是已排序的容器,但编译器不知道如何对Baloons
进行排序。您必须定义自定义operator<
,以便对容器进行排序。
这显然是一个家庭作业问题(很确定这只是为了'myBaloons.pop()&#39;笑话而创造的所以我不想让整件事情消失......在你的Baloons课上添加这样的东西。
bool operator<(const Baloons& rhs) const {
// return true if this Baloons is less than 'rhs'
}
这样你的Baloons可以比较。 (例如if (baloon1 < baloon2) { /* do stuff */ }
)优先级队列在插入新对象时在后台进行此比较。
答案 2 :(得分:0)
您需要为operator<
提供重载Baloons
,否则编译器不知道如何订购std::priority_queue<Baloons>
的元素。例如,在Baloons
类中定义类似的内容:
bool operator<(const Baloons& _other) const {
return end < _other.end;
}
或者你想在这里代替return
语句进行比较。
答案 3 :(得分:0)
提供bool operator < (const Baloons&, const Baloons&)
,
bool operator < (const Baloons& lhs, const Baloons& rhs)
{
return lhs.end < rhs.end;
}
或创建一个仿函数CustomComparer
并将其提供给std::priority_queue<Ballons, std::vector<Ballons>, CustomComparer>
struct CustomComparer
{
bool operator () (const Baloons& lhs, const Baloons& rhs) const
{
return lhs.end < rhs.end;
}
};
以后
std::priority_queue<Ballons, std::vector<Ballons>, CustomComparer> myBaloons;