It is possible to use standard function if your type implements "bool operator < (...) const"
and a copy constructor (compiler-generated or custom).
struct MyType {
int a;
int b;
bool operator < (const MyType& other) const {
... // a meaningful implementation for your type
}
// Copy constructor (unless it's a POD type).
MyType(const MyType &other)
: a(other.a), b(other.b) { }
// Some other form of construction apart from copy constructor.
MyType()
: a(0), b(0) { }
};
Alternatively, you can pass an ordering function (or a functor) as a third argument to sort()
instead of implementing operator "<"
.
bool type_is_less(const MyType& t1, const MyType& t2) { ... }
...
std::sort(c.begin(), c.end(), type_is_less);
This is useful in the following situations:
- you don’t want to implement operator
"<"
for whatever reason, - you need to sort a container of built-in or pointer types for which you can’t overload operators.
- you wish to sort the sequence using different orderings. ex: sometimes you want a struct with first/last name members sorted by first name, other times by last name. two different functions (or functors) make such options trivial.