#cpp
Есть предположение, что возможно провернуть с sort(v.begin(), v.end(), cmp), но не понимаю, как задействуется/что означает третий параметр (гугл также не внес ясности)
Ответы
Ответ 1
В предположении, что вас интересует vector>>, cmp может выглядеть примерно так, например: bool cmp(const pair >& p1, const pair >& p2) { return p1.second.second < p2.second.second; } Ответ 2
Это ссылка на функцию вида bool foo(const T& a, const T& b), где T — тип элементов сортируемого вектора. Задача этой функции — проверить, упорядочены ли a и b по возрастанию. Иными словами, не превышает ли значение a таковое у b (говоря математическим языком — соблюдается ли условие a < b).Ответ 3
cmp это любой функциональный объект. Это может быть лямбда, указатель на функцию или объект класса у которого определен operator(). Этот функциональный объект должен принимать два объекта из сортируемого списка, и возвращать bool. Объект должен реализовывать операцию строгого слабого упорядочения. Вот так это будет выглядеть на вашем примере: #include#include #include typedef std::pair > IntIntInt; struct Compare{ inline bool operator()(const IntIntInt &x, const IntIntInt &y) const{ return x.second.second < y.second.second; } }; int main(){ std::vector v; v.push_back(std::make_pair(5, std::make_pair(3, 4))); v.push_back(std::make_pair(1, std::make_pair(9, 0))); v.push_back(std::make_pair(8, std::make_pair(6, 7))); v.push_back(std::make_pair(4, std::make_pair(2, 3))); v.push_back(std::make_pair(3, std::make_pair(1, 2))); std::sort(v.begin(), v.end(), Compare()); } PS: гугл также не внес ясности Не сочтите за рекламу. Есть один замечательный сайт на котором можно подсмотреть описание всех алгоритмов, их аргументы, гарантии исключений, сложность и примеры использования.
Комментариев нет:
Отправить комментарий