我正在尝试在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]
作为初始化程序,但这不起作用。
编辑:这将成为一个相当大的多维数组,并且需要它以便我可以根据循环控制变量获取值和存储,循环控制变量的长度会有所不同。
答案 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
次调用。
现在,您可以使用索引first
或second
访问每个内部元素:
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
类。