По умолчанию std::sort()
использует operator<()
в качестве компаратора.Вот почему сортировка работает с вашей Edge
структурой.
Если вы хотите выполнить пользовательскую сортировку, или ваш структура / класс не предоставляет operator<()
, то вам нужно передать объект функции сравнения вstd::sort()
.Например, если мы изменим вашу Edge
структуру, чтобы удалить operator<()
...
struct Edge {
int u, v, weight;
};
void print_edges(const std::vector<Edge> &edges)
{
for (Edge const &e : edges)
{
std::cout << e.weight << std::endl;
}
}
int main()
{
std::vector<Edge> edges { {4, 5, 9}, {1, 2, 3} };
std::cout << "Unsorted:\n";
print_edges(edges);
std::sort(edges.begin(), edges.end(), [](Edge const &lhs, Edge const &rhs){
return lhs.weight < rhs.weight;
});
std::cout << "Sorted:\n";
print_edges(edges);
return 0;
}