Допустим, у меня есть класс Rectangle
, например:
class Rectangle {
public:
double width;
double height;
}
Теперь я хочу сохранить два, возможно, разных списка Rectangles
как кучи, за исключением того, что первая куча должна основываться на width
, а вторая - на height
. Кроме того, я хочу использовать функцию stl make_heap
для heapify. В идеале, я должен иметь возможность вызывать .heapify()
в куче, и в зависимости от класса, к которому он принадлежит, рассматриваемая куча должна самоуничтожиться, передав правильную функцию сравнения в make_heap
, возможно, с использованием динамической диспетчеризации. Что у меня есть следующее:
class Heap {
public:
vector<Rectangle> data;
virtual bool comp(Rectangle a, Rectangle b);
void heapify() { make_heap(data.begin(), data.end(), comp); }
// other methods that make use of comp directly
}
class WidthHeap : public Heap {
bool comp(Rectangle a, Rectangle b); // compares by width
}
class HeightHeap : public Heap {
bool comp(Rectangle a, Rectangle b); // compares by height
}
Это все неправильно, потому что, я думаю, я просто не понимаю функции в C ++, поэтому мне нужна ваша помощь.