перегрузка операторов в структуре в cpp - PullRequest
0 голосов
/ 08 марта 2019

Я читал, и я запутался в приведенной ниже части перегрузки операторов, здесь как мы можем сортировать без определения компаратора.

Как сортировка происходит по двум структурам без определения какого-либо компаратора, как компилятор узнаетна каком основании он имеет два вида?

Когда мы будем использовать, когда e1

предположим, что компаратор по умолчанию для сортировки STL использует что-то вроде этого оператора e1bool <(Edge const & other) внутри struct. </p>

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

1 Ответ

0 голосов
/ 08 марта 2019

По умолчанию 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...