C++:交换向量中所有元组的第一个和第二个元素

Aka*_*ari 0 c++ swap tuples vector

有没有办法交换向量中所有元组的第一个和第二个元素?假设我有这样的事情:

#include<vector>
#include<tuple>

int main()
{
std::vector<std::tuple<int,int>> my_vector;
my_vector.push_back(std::make_tuple(1,2));
my_vector.push_back(std::make_tuple(3,4));
}
Run Code Online (Sandbox Code Playgroud)

元组的第一个元素现在是 1 和 3,第二个元素是 2 和 4。是否可以轻松地将 2 和 4 设为第一个元素?

Evg*_*Evg 6

您可以使用std::for_each带有 lambda 的算法:

std::for_each(my_vector.begin(), my_vector.end(), [](auto& tuple) {
    std::swap(std::get<0>(tuple), std::get<1>(tuple));
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用基于范围的for

for (auto& tuple : my_vector)
    std::swap(std::get<0>(tuple), std::get<1>(tuple));
Run Code Online (Sandbox Code Playgroud)

如果您决定替换std::tuplestd::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));
Run Code Online (Sandbox Code Playgroud)

如果int您有一些用户定义的 type T,而不是 ,则这很有用,为其void swap(T&, T&)实现了函数(可能比 性能更高std::swap)并且可以通过依赖参数的查找找到