1

我正在尝试在 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]其用于初始化程序,但这不起作用。

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

4

3 回答 3

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
于 2013-08-27T15:39:42.827 回答
4

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

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

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

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

于 2013-08-27T15:44:49.473 回答
0

这通常不应该在 C++ 中完成。如果您要关联对(例如,字符和整数),并希望它们在一个数组中,您应该使用一个简单的结构来关联这两者,例如

struct MyPair {
   char letter;
   int number;
};

然后像这样使用它:

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

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

于 2013-08-27T15:46:38.663 回答