2013-08-27 60 views
1

我试图创建在C++多维数组,其中有一个字符串,并参与一个int。我试图int test[1][2] = {{"a", 1}, {"b", 2}, {"c", 3}};但G ++给了我下面的:C++多维数组多种数据类型

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

你是一个映射到另一个或储存对? – chris

+0

基本上是试图将它们存储在对访问的每个值做这样的事情'试验[0] [0]' – cellsheet

回答

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 
+0

好,我需要能够使用多维数组来取得长度(由是,我的意思是数量对),也可以在'while(i <= 10){test [0] [i];我++; }' – cellsheet

+0

@cellsheet,你可以用'test.size()'得到配对的数量。至于你的另一个例子,对只有两个“元素”,所以“我<= 10”没有意义。只有两个,我无法想象为什么你会特别使用'[i]'而不仅仅是'.first',然后是'.second'。 – chris

+0

有一个特定的公式,我必须在这个公式中严重依赖数组的长度和存储/访问取决于循环控制变量的值。 while(length cellsheet

4

在C不允许++。一个数组只能有一个类型,所以指定一个具有两种类型的数组实际上并不合理。

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

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

然后定义类型对一个维阵列。然后访问你的元素,如array[0].s

0

这一般不应该在C++完成。如果你是在一个阵列关联对(字符和int,例如),并希望他们,你应该使用一个简单的结构关联两个,像

struct MyPair { 
    char letter; 
    int number; 
}; 

然后使用它是这样的:

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

这通常是更一个C风格。你也可以考虑创建一个包含你想要的信息的类,并使用STL集合,如Vector类。