c ++多维数组多种数据类型

时间:2013-08-27 15:35:01

标签: c++ arrays multidimensional-array

我正在尝试在c ++中创建一个多维数组,其中包含一个字符串和一个int。我试过int test[1][2] = {{"a", 1}, {"b", 2}, {"c", 3}};,但g ++给了我以下内容:

example.cpp: In function ‘int getServer(std::string)’:
error: too many initializers for ‘int [1][2]’
error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]

我尝试使用char test[1][2]作为初始化程序,但这不起作用。

编辑:这将成为一个相当大的多维数组,并且需要它以便我可以根据循环控制变量获取值和存储,循环控制变量的长度会有所不同。

3 个答案:

答案 0 :(得分:4)

使用std::pair

std::array<std::pair<std::string, int>, 3> test{{"a", 1}, {"b", 2}, {"c", 3}};

std::pair适用于C ++ 03,但我使用的初始化和数组类型是C ++ 11。您仍然可以使用普通数组和一堆std::make_pair次调用。

现在,您可以使用索引firstsecond访问每个内部元素:

test[0].first //"a"
test[2].second //3

答案 1 :(得分:4)

这在c ++中是不允许的。一个数组只能有一个类型,所以指定一个有两种类型的数组,实际上没有意义。

我这样做的想法是定义一个结构:

struct pair {
    std::string s;
    int i;
}

然后定义一对类型对的一维数组。然后访问您的元素,例如array[0].s

答案 2 :(得分:0)

这通常不应该在C ++中完成。如果你正在关联对(例如chars和int),并希望它们在数组中,你应该使用一个简单的结构来关联它们,比如

struct MyPair {
   char letter;
   int number;
};

然后像这样使用它:

MyPair pairAr[2];
MyPair myPair;
myPair.letter = 'a';
myPair.number = 1;
pairAr[0] = myPair;

这通常更像是C风格。您还可以考虑创建一个包含所需信息的类,并使用STL集合,例如Vector类。