Когда хорошо использовать std::pair?

У меня сложилось впечатление, что всегда лучше определить свою собственную структуру, чтобы я мог использовать значимые имена полей вместо first а также second,

Одно место, где стандарт использует std::pair для доступа к элементам std::map, first это ключ, и second Значение. Не было бы намного лучше иметь конкретный key_value_pair шаблон и ссылаться на его поля как key а также value вместо first а также second? Мне кажется, что это сделает код значительно более читабельным без каких-либо затрат.

1 ответ

Решение

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

Основной вариант использования предназначен для возвращаемого типа функции: C++ не позволяет возвращать несколько значений, но позволяет возвращать структуру с несколькими полями. Вместо того, чтобы использовать выходные параметры, я предпочитаю использовать пару или кортеж.

Второй вариант использования предназначен для специального хранения элементов; например, чтобы автоматически генерировать operator< за

struct A { int a; int b; int c; };

Ты можешь написать operator< сюда:

bool operator<(A const& left, A const& right) {
    return std::tie(left.a , left.b , left.c )
         < std::tie(right.a, right.b, right.c);
}

он автоматически генерирует правильный лексикографический порядок (так много людей испортят эти операторы...).

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