У меня есть класс bit
, который я хочу отсортировать по разным критериям для разных очередей приоритета.
В bit.h
У меня есть:
#include<vector>
#include<queue>
class bit {
static std::priority_queue<bit, std::deque<bit>> bigBitVector;
mutable long long startTime;
mutable long long endTime;
// other methods, constructor, etc.
static bool startTimeComp(const bit &a, const bit &c) {
return a.startTime > c.startTime;
}
static bool endTimeComp(const bit &a, const bit &c) {
return a.endTime > c.endTime;
}
}
В другом файле я пробую для инициализации одной очереди приоритетов bit
объектов как:
std::priority_queue<bit, std::deque<bit>, decltype(&bit::startTimeComp)> bigBitVector(bit::startTimeComp);
и другой как
std::priority_queue<bit, std::deque<bit>, decltype(&bit::endTimeComp)> bitQueue(bit::endTimeComp);
, но я получаю сообщение об ошибке:
/ usr /include/c++/7/bits/stl_function.h:386:20: ошибка: нет соответствия для 'operator <' (типы операндов - 'const bit' и 'const bit') </p>
I проверил эту ошибку, и я нашел других с проблемой, где они хотели определить что-то вроде
bool operator<(const bit &a) const {...}
, и ошибка возникает из-за отсутствия const
. Но если я добавлю const
к своим компараторам, компилятор пожалуется, потому что функция не может быть одновременно static
и const
; если я удаляю static
, он жалуется, потому что к нему нельзя получить доступ без указанного объекта c.
Похоже, проблема в том, что приоритетная очередь ищет определенный оператор c <
, а не использует компаратор, который я предоставил. Я не хочу предоставлять оператор <
, потому что тогда у меня не может быть двух разных очередей приоритетов, сортирующих одни и те же данные двумя разными способами.
Есть ли способ определить несколько компараторов и избежать этого ошибка?