Próbuję zaimplementować stertę min w C++ dla typu struct, który utworzyłem. Stworzyłem wektor typu, ale rozbił się, gdy użyłem make_heap na nim, co jest zrozumiałe, ponieważ nie wie, jak porównać elementy w stercie. Jak utworzyć min-stertę (czyli najwyższy element zawsze jest najmniejszy w sterty) dla typu struktury?Sterty min. C++ z typem zdefiniowanym przez użytkownika
Struct jest poniżej:
struct DOC{
int docid;
double rank;
};
Chcę porównać struktur DOC za pomocą członu rank. Jak to zrobić?
Próbowałem użyć kolejki priorytetowej z klasą komparatora, ale to również się zawiesiło, a także wydaje się głupio używać struktury danych, która wykorzystuje stertę jako podstawę, gdy tak naprawdę potrzebuję sterty.
Dziękuję bardzo, BSG
jaka jest twoja definicja "rozbił się"? Z pewnością, jeśli nie masz żadnego funktora funkcji porównawczych lub operatora <, otrzymasz * błędy kompilacji *. – sellibitze
Nie, właściwie nie. Zdecydowanie nie w kolejce priorytetów, która miała zdefiniowanego przeciążonego operatora, i nie myślę przy użyciu make_heap. Chociaż może być tak, że w tym ostatnim przypadku dostałem błąd kompilacji. Jednak po raz pierwszy kompilował się dobrze, ale rozbił się podczas uruchamiania. – bsg
Jeśli spróbujesz użyć make_heap tylko z dwoma argumentami, musisz mieć operator
sellibitze