Я пытаюсь определить очередь приоритета с настраиваемыми компаратора следующим образом:Определение очереди приоритета внутри класса с пользовательской функцией сравнения
typedef bool (*comp)(int,int);
bool compare(int exp1,int exp2){
return (exp1 > exp2);
}
class test{
public:
priority_queue<int,vector<int>,comp> test_pq(compare); // Gives compilation error
};
int main()
{
priority_queue<int,vector<int>,comp> pq(compare); // Compiles perfectly
return 0;
}
Это ошибка компиляции, которая показывает вверх
test.cpp:18:47: error: ‘compare’ is not a type
priority_queue<int,vector<int>,comp> test_pq(compare);
^
Я также попытался объявить другую функцию сравнения внутри тестового класса без эффекта. Почему очередь приоритетов в основной функции компилируется, а внутри внутри класса нет? Является ли определение выделенного класса для компаратора единственной работой здесь? Спасибо.
Спасибо за сквозной ответ :) Но разве нет способа заставить его работать независимо от версии? Скажем, изменив инициализацию на конструктор класса? –
@ ant_1618, да, конечно, вы можете это сделать. Я обновил ответ, чтобы включить этот вариант. Но если вы уже знаете слова 'initialization' и' constructor', я бы ожидал, что вы уже знаете ответ ... =) – magras
Я не знал о том, как cpp инициализирует переменные-члены неявно в конструкторе с помощью 'Test(): [initialisation list] {\\ code} '. Итак, я не мог ответить на этот вопрос: P Теперь понятно: D Спасибо :) –