c ++:交换向量中所有元组的第一个和第二个元素
c++: Swap first and second element for all tuples in a 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));
}
元组的第一个元素现在是 1 和 3,第二个元素是 2 和 4。是否有简单的方法让 2 和 4 成为第一个元素?
您可以使用带有 lambda 的 std::for_each
算法:
std::for_each(my_vector.begin(), my_vector.end(), [](auto& tuple) {
std::swap(std::get<0>(tuple), std::get<1>(tuple));
});
您也可以使用 range-based for
:
for (auto& tuple : my_vector)
std::swap(std::get<0>(tuple), std::get<1>(tuple));
如果您决定将 std::tuple
替换为 std::pair
,此代码也将有效,因为 std::pair
的成员 first
和 second
can be accessed分别使用std::get<0>
和std::get<1>
。
而不是 std::swap(...)
你可能想写 :
using std::swap;
swap(std::get<0>(tuple), std::get<1>(tuple));
如果您有一些用户定义类型 T
而不是 int
,这将很有用,为此实现了 void swap(T&, T&)
函数(可能比 [=26= 更高效) ]) 并且可以通过 argument-dependent lookup.
找到
由于您的 std::tuple
仅包含两个值,我建议您改用 std::pair
。
#include <iostream>
#include <vector>
#include <utility>
int main()
{
std::vector<std::pair<int,int>> my_vector;
my_vector.push_back(std::make_pair(1,2));
my_vector.push_back(std::make_pair(3,4));
for (auto const& p : my_vector) {
std::cout << p.first << " " << p.second << std::endl;
}
for (auto& p : my_vector) {
std::swap(p.first, p.second);
}
for (auto const& p : my_vector) {
std::cout << p.first << " " << p.second << std::endl;
}
}
有没有办法交换向量中所有元组的第一个和第二个元素? 假设我有这样的东西:
#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));
}
元组的第一个元素现在是 1 和 3,第二个元素是 2 和 4。是否有简单的方法让 2 和 4 成为第一个元素?
您可以使用带有 lambda 的 std::for_each
算法:
std::for_each(my_vector.begin(), my_vector.end(), [](auto& tuple) {
std::swap(std::get<0>(tuple), std::get<1>(tuple));
});
您也可以使用 range-based for
:
for (auto& tuple : my_vector)
std::swap(std::get<0>(tuple), std::get<1>(tuple));
如果您决定将 std::tuple
替换为 std::pair
,此代码也将有效,因为 std::pair
的成员 first
和 second
can be accessed分别使用std::get<0>
和std::get<1>
。
而不是 std::swap(...)
你可能想写
using std::swap;
swap(std::get<0>(tuple), std::get<1>(tuple));
如果您有一些用户定义类型 T
而不是 int
,这将很有用,为此实现了 void swap(T&, T&)
函数(可能比 [=26= 更高效) ]) 并且可以通过 argument-dependent lookup.
由于您的 std::tuple
仅包含两个值,我建议您改用 std::pair
。
#include <iostream>
#include <vector>
#include <utility>
int main()
{
std::vector<std::pair<int,int>> my_vector;
my_vector.push_back(std::make_pair(1,2));
my_vector.push_back(std::make_pair(3,4));
for (auto const& p : my_vector) {
std::cout << p.first << " " << p.second << std::endl;
}
for (auto& p : my_vector) {
std::swap(p.first, p.second);
}
for (auto const& p : my_vector) {
std::cout << p.first << " " << p.second << std::endl;
}
}