Вы можете использовать std::for_each
алгоритм с лямбдой:
std::for_each(my_vector.begin(), my_vector.end(), [](auto& tuple) {
std::swap(std::get<0>(tuple), std::get<1>(tuple));
});
Вы также можете использовать на основе диапазона for
:
for (auto& tuple : my_vector)
std::swap(std::get<0>(tuple), std::get<1>(tuple));
Если вы решите заменить std::tuple
на std::pair
, этот код также будет работать, поскольку члены std::pair
first
и second
могут быть доступны с помощью std::get<0>
и std::get<1>
соответственно.
Вместо std::swap(...)
вы можете написать это таким образом :
using std::swap;
swap(std::get<0>(tuple), std::get<1>(tuple));
Это полезно если вместо int
у вас есть определенный пользователем тип T
, для которого реализована функция void swap(T&, T&)
(предположительно более производительная, чем std::swap
) и может быть найдена с помощью зависимого от аргумента поиска .