c++ - std::get 在处理元组 vector 时返回错误

标签 c++ stdvector stdtuple

我正在尝试创建一个包含元组的 vector

这是我的代码:

std::vector<std::tuple<std::vector<std::tuple<std::string,int,int>>> vec;
...
...
for (i = 0; i < 5; i++) {
    vec.push_back(std::tuple<std::vector<std::tuple<std::string,int,int>>());
    for(int j=0;j<5;j++) {
        std::get<0>(vec[i]).push_back(std::tuple<std::string,int,int>());
        std::get<0>(std::get<0>(vec[i]))[j] = value; //error
        std::get<1>(std::get<0>(vec[i]))[j] = value1;
    }

错误:

no matching function for call to 'get(std::vector<std::tuple<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, int, int> >&)'*

它有什么问题? 谢谢。

最佳答案

这是你的代码的工作版本

std::vector<std::tuple<std::vector<std::tuple<std::string,int,int>>>> vec;
for (int i = 0; i < 5; i++) {
    vec.push_back(std::tuple<std::vector<std::tuple<std::string,int,int>>>());
    for(int j=0;j<5;j++) {
        std::get<0>(vec[i]).push_back(std::tuple<std::string,int,int>());
        std::get<0>(std::get<0>(vec[i])[j]) = "str";
        std::get<1>(std::get<0>(vec[i])[j]) = 1;
    }
}

http://coliru.stacked-crooked.com/a/0cdc4531904a56b3

您缺少一些 >,并且您完全搞砸了赋值语句。

我的建议:永远不要创建这样的数据结构。如果您需要复杂的数据结构,请制作真正的结构/类。给他们有意义的名字。这将使代码更具可读性和可维护性。

例如

struct Record {
    std::string name;
    int value;
    int otherValue;
};

代替

std::tuple<std::string,int,int>

还有一个元组只包含单个元素,这在这里没有多大意义。

关于c++ - std::get 在处理元组 vector 时返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707400/

相关文章:

c++ - 将新分配的内存分配给结构指针时出现段错误

c++ - 为什么不打印错误消息?

c++ - 为什么需要 std::move 来调用 std::vector 的 move 赋值运算符

c++ - 如何使用共享基类遍历std::tuple的元素?

c++ - 为什么你不能从一个元组中分配一个对,但元组可以从一个对中分配?

c++ - std::get 在右值引用元组上的行为是否危险?

c++ - 对 C++11 标准的工具链支持

C++ 访问者模式处理模板化字符串类型?

c++ - 在 C++ 中将 while 循环与 vector 一起使用时出现超出范围异常

c++ - 连接两个std::vector