компараторы в функции сортировки и очереди приоритетов c ++ - PullRequest
0 голосов
/ 04 июля 2018

В функции сортировки C ++ третьим необязательным параметром является компаратор, используемый для сортировки объектов. Если мы передадим меньше в качестве компаратора, мы получим объекты в возрастающем порядке. (если компаратор оценен как истинный, позиции не будут изменены, иначе элементы будут поменяться местами!) Правильно ли мое понимание?

Аналогичным образом, если мы передадим меньший компаратор в приоритетную очередь, мы должны получить минимальную кучу (если базовая структура данных выбрана векторной, объекты сортируются в порядке возрастания. Если мы вызываем top ( ), будет возвращен первый элемент вектора, который является наименьшим числом. Поэтому я думаю, что это минимальная куча) почему мы получаем максимальную кучу?

1 Ответ

0 голосов
/ 04 июля 2018

Согласно этой онлайн-документации , класс библиотеки C ++ std::priority_queue сначала возвращает наибольший элемент в том смысле, что компаратор упорядочивает меньшие элементы перед более крупными. Сверху ссылка:

Обратите внимание, что параметр Compare определен так, что он возвращает true если его первый аргумент предшествует второму аргументу в слабом упорядоченность. Но поскольку приоритетная очередь выводит самые большие элементы во-первых, элементы, которые «предшествуют», фактически выводятся последними Тот передний конец очереди содержит последний элемент в соответствии с слабое упорядочение, наложенное Compare.

Таким образом, std::priority_queue<T,std::less<T>> создает максимальную кучу и расставляет приоритеты для больших элементов.

...