Я наткнулся на какое-то странное использование priority_queue, я хотел бы получить какое-то правильное объяснение того, почему правдоподобно/действительно использовать что-то подобное в объявлении priority_queue:
typedef priority_queue<RandomContainer, **vector<RandomContainer>**, FunctorName> NewQueueName;
Допустим, у нас есть некоторая структура с именем SPerson:
struct SPerson
{
int age;
string name;
string surname;
};
и некоторый функтор, который будет полезен для сортировки всех элементов очереди по нашему вкусу:
struct TheWayILike
{
bool operator()(const SPerson &name1, const SPerson &name2)
{
if(name1.name > name2.name) return true;
if(name1.name < name2.name) return false;
return false;
}
};
Теперь мы можем объявить нашу priority_queue, которая будет основана на элементах структуры и будет упорядочена функтором TheWayILike.
priority_queue<SPerson, TheWayILike>
или короче, используя typedef и одно имя, например:
typedef priority_queue<SPerson, TheyWayILike> newNameForPQ;
но как-то это неправильно, и я должен добавить следующую строку: вектор
Вопрос:
С какой стати мне нужно сжимать мои настраиваемые типы данных в вектор?
Почему это должен быть вектор и почему я все равно должен его использовать?
Почему мне нужно заполнить мои данные в векторе? Я не читал об этом в официальной документации priority_queue, поэтому я хотел бы получить какое-нибудь понятное объяснение для программиста-новичка.
Ваше здоровье!
Container
— это только параметр шаблона. Он сообщаетpriority_queue
, что использовать внутри, вам не нужно предоставлять экземпляр этого контейнера! Другими словами, создайте свою очередь следующим образом:priority_queue<SPerson, vector<SPerson>, TheWayILike> myPQ
и поместите в нее свои элементы SPerson:myPQ.push(a); myPQ.push(b); ...
- person Daniel L   schedule 18.10.2014