Пользовательский распределитель для STL priority_queue - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь передать пользовательский распределитель STL priority_queue. Я смог сделать это для STL vector и unordered_map, но не могу использовать аналогичный синтаксис для priority_queue. У кого-нибудь есть подсказка или пример кода, который я могу использовать?

Обратите внимание, что мне нужно передать экземпляр распределителя в качестве одного из аргументов конструктора.

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

В отличие от std::vector и std::unordered_map, которые являются контейнерами, std::priority_queue является адаптером контейнера.Он содержит контейнер и предоставляет к нему специальный доступГлядя на подходящую ссылку , вы можете видеть, что второй параметр шаблона std::priority_queue является контейнером (std::vector по умолчанию).Так что вам просто нужно передать свой собственный контейнер с пользовательским распределителем:

std::priority_queue<T, std::vector<T, MyAllocator>> q;
0 голосов
/ 13 сентября 2018

std::priority_queue - это контейнерный адаптер. Он ничего не выделяет сам по себе, он переносит это в базовый контейнер (который по умолчанию равен std::vector с распределителем по умолчанию). Смотри также https://en.cppreference.com/w/cpp/container/priority_queue

Другими словами: чтобы использовать настраиваемый распределитель, вы должны указать контейнер (вероятно, std::vector), который использует ваш настраиваемый распределитель в качестве Container аргумента шаблона std::priority_queue. Затем вы можете использовать любой из конструкторов std::priority_queue, который принимает экземпляр распределителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...