C++ C+;中的最小堆自定义比较器+;
我有一个Point类,正在创建一个点对象的最小堆C++ C+;中的最小堆自定义比较器+;,c++,stl,heap,C++,Stl,Heap,我有一个Point类,正在创建一个点对象的最小堆 class Point { int x; int y; public: Point(int _x, int _y) { x = _x; y = _y; } int getX() const { return x; } int getY() const { return y; } }; // To compare two points class myComparator { p
class Point
{
int x;
int y;
public:
Point(int _x, int _y)
{
x = _x;
y = _y;
}
int getX() const { return x; }
int getY() const { return y; }
};
// To compare two points
class myComparator
{
public:
int operator() (const Point& p1, const Point& p2)
{
return p1.getX() > p2.getX();
}
};
int main() {
priority_queue<Point,vector<Point>,myComparator> pq;
pq.push(Point(2,3));
pq.push(Point(3,4));
return 0;
}
类点
{
int x;
int-y;
公众:
点(整数x,整数y)
{
x=x;
y=_y;
}
int getX()常量{return x;}
int getY()常量{return y;}
};
//比较两点
类比较器
{
公众:
int运算符()(常数点和p1、常数点和p2)
{
返回p1.getX()>p2.getX();
}
};
int main(){
优先级队列pq;
pq.推力(点(2,3));
pq.推力(点(3,4));
返回0;
}
如果我想基于每个点对象中较小的x值创建最小堆。
为什么是p1.getX()>p2.getX(),而不是p1.getX()模板<
T类,
类容器=std::vector,
类比较=std::less
类优先级队列;
优先级队列是一个容器适配器,它提供了对最大的(默认情况下)元素的恒定时间查找,而以对数插入和提取为代价
可以提供用户提供的比较来更改顺序,例如,使用std::greater将导致最小元素显示为top()
默认情况下,std::priority_queue使用比较器对优先级队列进行排序,使具有较高值的元素具有优先级
如果您希望先处理较小的值,则需要提供一个比较器来反转该函数,该比较器返回的秩越低,值越高。请参阅:
模板<
T类,
类容器=std::vector,
类比较=std::less
类优先级队列;
优先级队列是一个容器适配器,它提供了对最大的(默认情况下)元素的恒定时间查找,而以对数插入和提取为代价
可以提供用户提供的比较来更改顺序,例如,使用std::greater将导致最小元素显示为top()
默认情况下,std::priority_queue使用比较器对优先级队列进行排序,使具有较高值的元素具有优先级
如果希望先处理较小的值,则需要提供一个比较器来反转该函数,该比较器返回的秩越低,值越高。Parent and child?我看不到任何遗产,你说的“父母和孩子”是什么意思?此外,即使有继承,我也不认为
或不知道在没有添加任何内容的情况下复制/粘贴有什么帮助,你昨天问的,在你没有跟进评论后,由于缺乏细节而关闭的。家长和孩子?我看不到任何遗产,你说的“父母和孩子”是什么意思?此外,即使存在继承,我不认为
或不知道在没有添加任何内容的情况下复制/粘贴您昨天询问的内容会有什么帮助,因为您未能跟进评论,该内容因缺乏详细信息而关闭。
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
class priority_queue;