从元组中提取向量

Posted

技术标签:

【中文标题】从元组中提取向量【英文标题】:Extracting vectors from a tuple 【发布时间】:2017-12-29 10:30:47 【问题描述】:

我在一个元组函数中有一个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!\n";
    

    return 0;

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

【问题讨论】:

【参考方案1】:

您不能在右侧使用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!\n";

提供所需的结果。

通过查看编译器的输出,还值得研究一下为什么编译器会在您的代码下放置squiggly 红线。

【讨论】:

【参考方案2】:

检查这个 :) 只要你不能返回初始值设定项列表(向量的隐式构造函数),你可以用向量构造函数返回创建的元组(显式)。

#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!\n";
    

    return 0;

【讨论】:

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

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

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

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

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

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

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