2015-09-23 133 views
0

這個問題在C++上。我怎麼能做一個數組,第一行有字符串,第二行有雙打?我認爲它應該是無效的,但它不起作用。有沒有其他方法?乾杯2種類型的多維數組cpp

+1

「我想應該是無效的,但它不是工作。」什麼不工作?你有嘗試過什麼嗎? – robert

回答

5

數組中不能有不同的類型。如果你需要有兩種不同類型有幾種方法可以做到這一點

  • 您可以使用std::pair,如:std::pair<std::string, double>
  • 您可以使用structclass包裹不同的充類型一起想:

    struct some_name 
    { 
        std::string string_name; 
        double double_name; 
    }; 
    
  • 你可以使用一個std::mapstd::unordered_map

  • 可以使用2個獨立的陣列一個用於std::sting部分,一個用於double部分
  • C++ 11及以後也具有std::tuple就是喜歡std::pair但也可以使用多於2種。

我也建議使用std::array的,如果你知道在編譯時數組的大小和std::vector如果數組大小不會直到運行時是已知的。

1

您可以使用pair,但你必須給這個數組的大小。例如:

std::array<std::pair<std::string, double>, 3> dummy{{"string", 1.1}, {"foo", 2.2}, {"bar", 3.3}}; 

可以使用firstsecond然後訪問的元素:

dummy[0].first // it is a string (string) 
dummy[1].second // it is a double (2.2) 

您也可以創建一個struct並且有一個數組struct ..

0

使用std::pair或您自己定義的結構/類的數組。或者,如果您需要搜索,請考慮使用std::map

0

您可以使用:

示例代碼:使用結構使用對

vector <pair <string, double> > test; 
test.push_back(make_pair("Age",15.6)); 
test.push_back(make_pair("Job",5)); 
cout << test[0].first<<" " << test[0].second; 

struct str_test{ 
string name; 
double value; 
}; 
str_test temp; 
temp.name = "Some"; 
temp.value = 1.1; 
vector<str_test>test; 
test.push_back(temp); 
cout << test[0].name <<" "<<test[0].value;