Пространства имён
Варианты
Действия

std::swap(std::pair)

Материал из cppreference.com
< cpp‎ | utility‎ | pair
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::pair
Функции-элементы
(C++11)
Функции, не являющиеся элементами
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
std::swap
(C++11)
(C++11)
Правила вывода(C++17)
Вспомогательные классы
(C++11)
 
Определено в заголовочном файле <utility>
(1)
template< class T1, class T2 >

void swap( std::pair<T1,T2>& x, std::pair<T1,T2>& y )

    noexcept(/* смотрите ниже */);
(начиная с C++11)
(до C++20)
template< class T1, class T2 >

constexpr void swap( std::pair<T1,T2>& x, std::pair<T1,T2>& y )

    noexcept(/* смотрите ниже */);
(начиная с C++20)
template< class T1, class T2 >

constexpr void swap( const std::pair<T1,T2>& x, const std::pair<T1,T2>& y )

    noexcept(/* смотрите ниже */);
(2) (начиная с C++23)

Меняет местами содержимое x и y. Эквивалентно x.swap(y).

1) Эта перегрузка участвует в разрешении перегрузки, только если std::is_swappable_v<first_type> && std::is_swappable_v<second_type> равно true.
2) Эта перегрузка участвует в разрешении перегрузки, только если std::is_swappable_v<const first_type> && std::is_swappable_v<const second_type> равно true.
(начиная с C++17)

Содержание

[править] Параметры

x, y пары, содержимое которых поменять местами

[править] Возвращаемое значение

(нет)

[править] Исключения

спецификация noexcept:  
noexcept(noexcept(x.swap(y)))

[править] Пример

#include <iostream>
#include <utility>
 
int main()
{
    auto p1 = std::make_pair(10, 3.14);
    auto p2 = std::pair(12, 1.23); // CTAD, начиная с C++17
 
    auto print_p1_p2 = [&](auto msg) {
        std::cout << msg
                  << "p1 = {" << std::get<0>(p1)
                  << ", "     << std::get<1>(p1) << "}, "
                  << "p2 = {" << std::get<0>(p2)
                  << ", "     << std::get<1>(p2) << "}\n";
    };
 
    print_p1_p2("Перед p1.swap(p2): ");
    p1.swap(p2);
    print_p1_p2("После p1.swap(p2): ");
    std::swap(p1, p2);
    print_p1_p2("После swap(p1, p2): ");
}

Вывод:

Перед p1.swap(p2): p1 = {10, 3.14}, p2 = {12, 1.23}
После p1.swap(p2): p1 = {12, 1.23}, p2 = {10, 3.14}
После swap(p1, p2): p1 = {10, 3.14}, p2 = {12, 1.23}

[править] Смотрите также

меняет местами значения двух объектов
(шаблон функции) [править]
специализация алгоритма std::swap
(шаблон функции) [править]