kavinderrana121 Ответов: 2

Перегрузка оператора внутри структуры в cpp


Я читал Минимальное остовное дерево - Крускал с непересекающимися множествами объединение - конкурентные алгоритмы программирования[^] и я запутался в приведенной ниже части перегрузки оператора,используемой в приведенной выше реализации, здесь мы можем сортировать без определения компаратора.

Как происходит сортировка по двум структурам без определения какого-либо компаратора,как компилятор узнает, на каком основании у него есть два вида?
Когда мы собираемся использовать, когда Е1&ЛТ;Е2 тогда кто позвонит оператор перегружен в <предварительно> В+&ЛТ;/пре&ГТ;что это Е1 или Е2.

предположим, что компаратор по умолчанию сортировки STL использует что-то вроде этого
в <предварительно&ГТ; Е1&ЛТ;Е2 &ЛТ;/пре&ГТ; (Е1 и Е2 имеют тип кромки), тогда как параметры, передаваемые `логический оператор&ЛТ;(край как const&амп; другие) внутри структуры.

Что я уже пробовал:

struct Edge {
    int u, v, weight;
    bool operator<(Edge const& other) {
        return weight < other.weight;
    }
};
vector<Edge> edges;
sort(edges.begin(), edges.end());

2 Ответов

Рейтинг:
2

Richard MacCutchan

Определение понятия operator < позволяет методу сортировки сравнивать два Edge элементы. То sort вызов берет элементы вектора от первого до последнего и использует перегруженный компаратор, как определено в структуре, чтобы решить, в каком порядке они должны быть сохранены. Поскольку оператор less than определен для типа ребра, это метод, который будет использоваться, когда сортировка делает что-то вроде:

if (elem1 < elem2)
{
    // ...
}


CPallini

5.

Рейтинг:
0

CPallini

Ричард я уже дал вам правильный ответ.

В качестве дополнения, глядя на документацию std::сортировка - cppreference.com[^], обратите внимание на первую перегрузку std::sort предназначенный.

Более того, читая эту статью: "Сортировка вектора пользовательских объектов в C++"[^], может быть полезным.