простой способ сохранить минимальную кучу с помощью stl?

для определяемой пользователем структуры, насколько я понимаю, это просто. Просто перегрузите operator <. Однако для int / float и т. д. мне действительно нужно перегрузить operator <для int ? Вот что я пробовал:

       #include <iostream>
       #include <algorithm>
       #include <vector>
       using namespace std;

       bool comp(const int& a, const int& b)
       {
          return a<b?false:true;
       }

       int main () 
       {
         int myints[] = {10,20,30,5,15};
         vector<int> v(myints,myints+5);
         vector<int>::iterator it;
         make_heap(v.begin(), v.end(), comp);
         cout << "initial min heap   : " << v.front() << endl;
         for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
         cout<<endl;

         pop_heap (v.begin(),v.end());
         v.pop_back();
         for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
         cout<<endl;
       }

результаты такие:

        initial min heap   : 5
        5 10 30 20 15
        30 10 15 20

теперь pop_heap, push_heap не будут правильно поддерживать минимальную кучу? Есть ли более простой способ добиться этого? Спасибо!

Редактировать: извините, я не проверил внимательно руководство. Да, прохожу g comp в pop_heap или push_heap должны помочь. Однако, что вы имеете в виду, я не должен использовать внешний компаратор? Если это неправильный путь, как обычно этого добиться?

19
задан user268451 7 October 2011 в 00:08
поделиться