Как найти максимальный элемент в этой паре std::vector<std::pair<int, int>>
на любой из осей.
Пусть это будет примерная пара:
0, 1
0, 2
1, 1
1, 2
1, 4
2, 2
3, 1
Я попытался использовать std::minmax_element()
:
const auto p = std::minmax_element(edges.begin(), edges.end());
auto max = p.second->first;
Но это генерирует максимальный элемент только первого столбца, то есть 3
, но мне нужен максимальный элемент любого из столбцов, то есть 4
.
Я хочу, чтобы максимальный элемент был самым высоким элементом любого столбца.
@LightnessRacesinOrbit да
Нам не нужен принятый ответ в вопросе; это прямо внизу, в разделе ответов, принято :)
Вам нужно предоставить предикат, который будет определять отношение "меньше" для ваших элементов:
const auto p = std::minmax_element(
edges.begin(), edges.end(),
[](const auto& a, const auto& b) {
// provide relation less you need, example:
return std::max(a.first, a.second) < std::max(b.first, b.second);
});
По умолчанию (в вашем коде) используется оператор less. Для std::pair
он работает в лексикографическом порядке элементов (если первые элементы меньше, возвращает true, если они равны, проверяет элементы second
, если меньше).
Используйте std:: max_element с пользовательской функцией сравнения, например:
auto max_pair = *std::max_element(std::begin(edges), std::end(edges),
[](const auto& p1, const auto& p2) {
return std::max(p1.first, p1.second) < std::max(p2.first, p2.second);
});
int max = std::max(max_pair.first, max_pair.second);
Просто небольшая проблема с синтаксисом: добавьте ); в конце первой строки. И спасибо за решение.
Так что под "оба" вы действительно имеете в виду "любой"?