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 成为第一个元素?
您可以将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));
});
您还可以使用基于范围的for
:
for (auto& tuple : my_vector)
std::swap(std::get<0>(tuple), std::get<1>(tuple));
如果你决定用std::pair
替换std::tuple
,这段代码也可以工作,因为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
更高性能(,并且可以通过依赖于参数的查找找到。
由于您的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;
}
}
现场示例
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- c++:交换向量中所有元组的第一个和第二个元素
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 为什么 Boost multi_index只修改第一个索引的键时对第二个索引进行比较?
- 如何从第一个参数推断第二个参数类型?
- C++ - 同时对向量的第一个和第二个进行排序
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- 首先处理第二个和第三个堆与第一个和第二个堆之间的逻辑差异
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- ->第一个/第二个到空映射迭代器开始
- 我如何根据第一或第二个对更大的值对成对排序
- C++11 获取第一个(第二个等)参数的类型,类似于result_of