Moze to zbyt proste pytanie ale dlaczego sortowanie umieszcza sie akurat w < >?
http://en.cppreference.com/w/cpp/container/set
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
Czyli o typie set
decyduje nie tylko typ elementu, ale również komparator i alokator. Jeżeli nie podajesz komparatora i alokatora to są używane domyślne (odpowiednio less<>
i allocator<>
), ale one zawsze tam są. Inaczej mówiąc
set<int, Sortt> // set<int, Sortt, allocator<int>>
i
set<int> // set<int, less<int>, allocator<int>>
to 2 różne typy
W tym przypadku Sortt
to komparator, a komparator jest używany właśnie poprzed operator()
. Innymi słowy, przeciążasz operator()
komparatora, a nie kontenera set
.
Innym sposobem zamiast podania własnego komparatora jest przeciążanie operator<
dla typu elementu
bool operator<(int a, int b)
</del>dzięki czemu less<>
będzie mógł używać naszego operatora (to jest możliwe tylko dla typów własnych i enumów).