Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中的最小堆自定义比较器+;_C++_Stl_Heap - Fatal编程技术网

C++ C+;中的最小堆自定义比较器+;

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

我有一个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
{
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;