从元组中提取向量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从元组中提取向量相关的知识,希望对你有一定的参考价值。

我有一个ints,一个vector<int>,以及一个元组函数中的vector<string>。如果运行此函数时出错,它将返回一个元组:{0, 0, {0}, {"0"}}ints没有错误。我已经简化了这段代码,并且无法弄清楚为什么我不能在元组中使用向量。它在{下面放了一条红色的波浪线。这是一个更简单的版本:

#include <iostream>
#include <vector>
using namespace std;


tuple<vector<int>, vector<string>> tuples()
{
    return { {0}, {"0"} };
}


int main()
{
    tuple<vector<int>, vector<string>> result = tuples();
    if (get<0>(result) == {0} && get<1>(result) == {"0"})
    {
        cout << "It worked!
";
    }

    return 0;
}

如果你不能在元组中使用向量,那么另一种方法是什么?

答案

您不能在右侧使用initialiser列表{0},即在==之后。

You can't use vectors in tuples是一个false声明。

将代码更改为:

tuple<vector<int>, vector<string>> result = tuples();
vector<int> v = {0};
vector<string> v2 = {"0"};
if (get<0>(result) == v && get<1>(result) == v2)
{
    cout << "It worked!
";
}

给出了预期的结果。

同样值得研究的是,为什么编译器通过查看编译器的输出在代码下面放置一个squiggly红线。

另一答案

检查这个:)如果你根本无法返回初始化列表(向量的隐式构造函数),则可以使用向量构造函数(显式)返回创建的元组。

#include <iostream>
#include <tuple>
#include <vector>
using namespace std;

std::tuple<std::vector<int>, std::vector<string>> tuples()
{
    return std::make_tuple(std::vector<int>({0}), std::vector<std::string>({"0"}));
}


int main()
{
    tuple<vector<int>, vector<string>> result = tuples();
    if (get<0>(result) == std::vector<int>{0} && get<1>(result) == std::vector<std::string>{"0"})
    {
        cout << "It worked!
";
    }

    return 0;
}

以上是关于从元组中提取向量的主要内容,如果未能解决你的问题,请参考以下文章

如果键匹配,如何从元组中提取一个值

从元组中的字典创建数据框

查询 Python 字典以从元组中获取值

我可以像在 for 循环中从数组中索引项目一样从元组中检索项目吗?

如果子字符串存在,则从元组中删除项目

以字符串格式从元组中删除项目[重复]