2013-08-27 100 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類。