Я пытаюсь сделать min-heap1 из long
s в C++, используя STL make_heap
и т. д., но мой компаратор, похоже, не сравнивает должным образом. Ниже приведен мой текущий компаратор:
struct greater1{
bool operator()(const long& a,const long& b) const{
return a>b;
}
};
Однако, когда я делаю std::pop_heap(humble.begin(),humble.end(),g);
, где g
— это экземпляр greater1
, а humble
— это куча, которая делает [9,15,15,25]
при вызове sort_heap
, я получаю 15
.
Правильно ли мой компаратор? что может пойти не так?
РЕДАКТИРОВАТЬ:
Я понял, что запускаю sort_heap без компаратора, тогда как когда я запускаю этот компаратор, я получаю [15,15,9,25]
из sort_heap
. Теперь я думаю, что мой компаратор определенно не работает, но не знаю, почему.
1STL по умолчанию создает максимальную кучу, поэтому мне нужен компаратор.
make_heap
? - person perreal   schedule 24.12.2012make_heap
, но только что понял, что могу не использовать его дляsort_heap
. - person Jakob Weisblat   schedule 24.12.2012const long& a
иconst long& b
не указывают указатели на константные значения, и поэтому сравнениеa
сb
является сравнением адресов этих значений? - person Zéychin   schedule 24.12.2012