当前位置: 首页 > 知识库问答 >
问题:

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

勾岳
2023-03-14

有没有办法将第一个和第二个元素替换为向量中的所有元组?假设我有这样的东西:

#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成为第一个元素吗?

共有2个答案

韶景曜
2023-03-14

由于您的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;
    }
}

现场示例

丌官霖
2023-03-14

您可以对每个算法使用lambda:

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

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

for (auto& tuple : my_vector)
    std::swap(std::get<0>(tuple), std::get<1>(tuple));

如果您决定将std::tuple替换为std::pair,此代码也会起作用,因为可以使用

而不是标准::交换(…) 您可能希望这样编写:

using std::swap;
swap(std::get<0>(tuple), std::get<1>(tuple));

如果您有一些用户定义的类型,而不是int,这将非常有用

 类似资料:
  • 本文向大家介绍交换数组的第k个元素-JavaScript,包括了交换数组的第k个元素-JavaScript的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受一个Numbers和一个数字数组,例如k(k必须小于或等于数组的长度)。 并且我们的函数应该从数组末尾的第k个元素开始替换第k个元素。 示例 以下是代码- 输出结果 以下是控制台中的输出-

  • 我写了一个函数来交换C中队列的第一个和最后一个元素 注意:“只考虑(空、去队列、CREATQ和入队)是其他函数。 但是如果最后一个元素在中间被复制,如果这是队列的元素(5,1,9,3,9),如果我们跟踪这些元素上的函数,它将会是(9,1,3,5),有一个丢失了! 那么,如果这个函数有逃避这个或任何其他想法的话?!

  • 我试着使用电抗器中的SwitchOnFirst算子,这很神奇-除了有时作为双函数的第二个参数传递的transformer似乎不包括第一个元素。基本上,客户端通过RSocket向服务器发送2个项目。代码服务器端如下所示: 客户端第一次启动时,服务器接收这两个项目,并按预期将其发布到actorsink。 但是,如果我停止客户端并再次运行它,则只发布第二项。 一个区别是请求(16)触发请求(16),而不

  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • 我有一个数组,看起来像:。而将始终保持常数。我希望x每迭代增加100。 我就是这么做的: null null 正如您所看到的,它不是在增加值。它总是只是插入。在第一个名为pies的对象中,我希望和下一个名为cakes的对象为。 我该怎么做?

  • 我试图将两个向量的元组包装成C中的元组,但无法解码神秘的编译器错误消息。 以下是代码片段(请原谅我使用指令): 这是Visual Studio 2010中的错误消息 我的代码有什么问题? <罢工>编辑:如果我显式地声明了结果类型,那么它是有效的。 编辑:假警报,如果我声明的类型,它也不会编译。