как изменить компаратор в priority_queue
От: UnderFelixAbove  
Дата: 27.08.07 16:09
Оценка:
Господа, всем привет!

У меня следующая проблема: У меня приоритетная очередь с типом данных vasia(пока не придумал более благозвучного назнывания)
struct vasia
{
int num;
int value;
vasia(){}
vasia(int n,int v)
{
num = n;
value = v;
}
};
У меня так же есть компаратор для типа данных vasia:

bool cmp (vasia a, vasia b)
{
return (a.num<b.num);
}

Но вот незадача, я не знаю как прикрутить его в объявлении приоретной очереди
priority_queue <vasia,vector<vasia>,cmp> p; — сие не компилирется.

Знатоки STL'а помогите!!!

Заранее СПАСИБО.
Re: как изменить компаратор в priority_queue
От: Кодт Россия  
Дата: 27.08.07 18:08
Оценка: 1 (1)
Здравствуйте, UnderFelixAbove, Вы писали:

<>

Нужно, на выбор,
— инициализировать компаратор в каждом экземпляре контейнера (см. сигнатуры конструкторов)
priority_queue<vasya, vector<vasya>, bool(*)(vasya,vasya)> // так выглядит тип
    pq (cmp); // а так - инициализация очереди

— сделать класс компаратора DefaultConstructible
struct cmp_vasya
{
    bool operator()(const vasya& x, const vasya& y) const
    {
        return cmp(x,y);
    }
};

priority_queue<vasya, vector<vasya>, cmp_vasya>
    pq;

— не выпендриваться и определить operator< над vasya

Да, кстати, желательно сложные объекты передавать по ссылке, а не по значению.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: как изменить компаратор в priority_queue
От: Alexander Pazdnikov  
Дата: 28.08.07 02:59
Оценка:
Здравствуйте, Кодт, Вы писали:

К>- не выпендриваться и определить operator< над vasya


Добрый юмор, аж настроение поднялось
Re: как изменить компаратор в priority_queue
От: UnderFelixAbove  
Дата: 28.08.07 17:31
Оценка:
Еще раз всем привет!

Разобрался я с проблемой, которая была у меня вчера.
Если кому то все таки будет интересно, то нужно было переопределить знак "<" для структуры vasia:
bool operator < (const vasia &a, const vasia &b)
{
return a.value<b.value;
}
Важно отметить, что сие нужно было написать вне стуктуры.

Вот собственно и все!

Как решить проблему подсунув третим параметром функцию cmp я пока не знаю. Если кто знает — подскажите)!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.