多维数组存储三种不同类型的数据?

问题描述 投票:0回答:1

我有一组三个值对,我想把它们存储在一个数组中,每个值有不同的类型。

[string][int][double] 用于存储以下内容 [John][12][40.025] [Amy][20][16000.411] 我希望能够通过位置来检索这些值。我应该使用什么容器?

我看了很多答案,但大部分都是关于两种数据类型的,我不知道哪一种更适合我的情况。

c++ multidimensional-array
1个回答
3
投票

这就是类的作用。

struct data {
    std::string name;
    int         name_describing_this_variable;
    double      another_descriptive_name;
};

你可以将这个类的实例存储在一个数组中。

data arr[] {
    {"John", 12, 40.025},
    {"Amy",  20, 16000.411},
};

2
投票

使用类模板 std::tuple 头部声明 <tuple>. 例如

#include <iostream>
#include <string>
#include <tuple>

int main() 
{
    std::tuple<std::string, int, double> t ={ "John", 12, 40.025 };

    std::cout << std::get<0>( t ) << ", "
              << std::get<1>( t ) << ", "
              << std::get<2>( t ) << '\n';

    std::cout << std::get<std::string>( t ) << ", "
              << std::get<int>( t ) << ", "
              << std::get<double>( t ) << '\n';

    return 0;
}

程序输出为

John, 12, 40.025
John, 12, 40.025

而且你可以使用这种类型的元素容器,例如一个数组,因为元组中列出的类型默认是可构造的。

例如

#include <iostream>
#include <string>
#include <tuple>

int main() 
{
    std::tuple<std::string, int, double> t[1];

    t[0] = { "John", 12, 40.025 };

    std::cout << std::get<0>( t[0] ) << ", "
              << std::get<1>( t[0] ) << ", "
              << std::get<2>( t[0] ) << '\n';

    std::cout << std::get<std::string>( t[0] ) << ", "
              << std::get<int>( t[0] ) << ", "
              << std::get<double>( t[0] ) << '\n';

    return 0;
}

作为一种选择,你可以定义自己的复合类型(类或结构),它将包含所需类型的子对象。

© www.soinside.com 2019 - 2024. All rights reserved.