priority_queue<pair<int, int>, greater<pair<int, int>>> tmp;
Возникает ошибка
"Ошибка C2794 value_type: не является прямым или косвенным базовым классом для "std::greater<std::pair<int,int>>"
"
Не понимаю почему не верно, если по умолчанию, если я указываю функцию сравнения, то там по умолчанию less, он же как-то заполняется и работает
второй параметр шаблона - тип контейнера
точно, теперь тогда я совсем не понял как с этим контейнером работать. Для чего нужен 2 параметр. Смотрю доку и не совсем понимаю для чего этот параметр нужен. Первый это тип хранимых значений, а второе тип базового контейнера. Типо идея в том, что priority_queue тупо укладывает данные в контейнер и вызывает sort?
что она внутри делает я не знаю, и сомневаюсь что оно где-то в стандарте описано. Но в целом да, приорити куе - адаптер
этого не достаточно https://en.cppreference.com/w/cpp/container/priority_queue ?
ну от части лишь. Возникает какой-то конфликт в голове с выбором контейнера. Вот есть map, если читать доку, то на оператор [] "No iterators or references are invalidated. ". Т.е в целом та можно было бы по тому же принципу и хранить, но как я понимаю с priority_queue я могу выбрать, инвалидировать или не инвалидировать указатели/итераторы
Просто на основе контейнера (2) строит очередь с приоритетом, приоритет задается компоратором
это адаптер над вектором или декой, при добавлении он сортирует вектор или деку согласно переданного компоратора (по умолчанию greater)
я просто не совсем понимаю для чего выбирать адаптер, когда можно было бы реализовать как в map. Асимптитока же добавления элемента и удаления идентична в обоих контейнерах.
Вроде не обязательно сортирует
Смысл разный и интерфейс разный
асимптотика там логарифм, и как иначе поддерживать приоритет в векторе?
Обсуждают сегодня