Как найти std::max_element в std::vector<std::pair<int, int>> по любой из осей?

Как найти максимальный элемент в этой паре 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.

Я хочу, чтобы максимальный элемент был самым высоким элементом любого столбца.

Так что под "оба" вы действительно имеете в виду "любой"?

Lightness Races in Orbit 22.05.2019 13:36

@LightnessRacesinOrbit да

Approachable 22.05.2019 13:44

Нам не нужен принятый ответ в вопросе; это прямо внизу, в разделе ответов, принято :)

Lightness Races in Orbit 22.05.2019 13:50
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
7
3
259
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно предоставить предикат, который будет определять отношение "меньше" для ваших элементов:

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);

Просто небольшая проблема с синтаксисом: добавьте ); в конце первой строки. И спасибо за решение.

Approachable 22.05.2019 14:07

Другие вопросы по теме