Błąd podczas sortowania STL

0
/* KOD USUNIĘTY */

Dzień dobry. Mam następujący błąd i nie wiem czemu:

error: no match for ‘operator<’ (operand types are ‘Edge’ and ‘Edge’)
       { return *__it1 < *__it2; }
                ~~~~~~~^~~~~~~~

Chodzi o funkcję myCompare. Czemu się czepia, przecież nie muszę definiować operatora w klasie/strukturze ani definiować obiektu funkcyjnego?

Dodam, że próbowałem zmienić znak na > ale to nic nie dało

1

});
Kompilujesz ten kod, który nam pokazujesz? Bo dla mnie ten ) jest tu kompletnie zbędny, ale powinien inny komunikat błędu pokazywać.

0

Podam pełny komunikat:

/usr/include/c++/7/bits/predefined_ops.h: In instantiation of ‘bool __gnu_cxx::__ops::_Iter_less_iter::operator()(_Iterator1, _Iterator2) const [with _Iterator1 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _Iterator2 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >]’:
/usr/include/c++/7/bits/stl_algo.h:4880:14:   required from ‘_OutputIterator std::__merge(_InputIterator1, _InputIterator1, _InputIterator2, _InputIterator2, _OutputIterator, _Compare) [with _InputIterator1 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _InputIterator2 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _OutputIterator = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _Compare = __gnu_cxx::__ops::_Iter_less_iter]’
/usr/include/c++/7/bits/stl_algo.h:4937:37:   required from ‘_OIter std::merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter) [with _IIter1 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _IIter2 = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >; _OIter = __gnu_cxx::__normal_iterator<Edge*, std::vector<Edge> >]’
main.cpp:266:99:   required from here
/usr/include/c++/7/bits/predefined_ops.h:43:23: error: no match for ‘operator<’ (operand types are ‘Edge’ and ‘Edge’)
       { return *__it1 < *__it2; }
                ~~~~~~~^~~~~~~~
0

Zrobiłeś pełen rebuild? Wyraźnie komunikat nie jest z myCompare, bo wywoływane jest porównanie za pomocą <. MCVE byłoby najlepsze, szczególnie ze pewnie w połowie jego tworzenia byś znalazł błąd.

0

Tak swoją drogą:

for (int j = i + 1; j < graph.size(); j++)

graf jest zawsze kwadratowy? Jak nie, to graph[i].size() chyba miało być.

2

Ok, to tak na przyszłość: https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

Wkleiłeś błędny kawałek loga, istotny był ten:

wb.cpp:264:100:   required from here

Który odnosi się do linii:

merge(trees[i].begin(), trees[i].end(), trees[j].begin(), trees[j].end(), trees[i].begin());

Do merge też trzeba komparator, inaczej używa <.

1 użytkowników online, w tym zalogowanych: 0, gości: 1