2011-06-13 102 views
3

這就是我的目標是什麼?C++:矢量<對<vector<int>,INT>>

vector < pair<vector<int>,int> > var_name (x, pair <vector<int>(y),int>); 

其中x是矢量VAR_NAME和y的大小是裏面的向量的大小對。

上述語句不起作用,因爲對模板只允許常量。我怎麼能讓我的矢量分別大小爲x和y?

回答

6
vector<pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 0)); 
+0

不錯! make_pair ...爲什麼我沒有想到這一點? – 2011-06-13 18:06:27

1

簡化爲:

pair<vector<int>,int> value(vector<int>(y), 0); 
vector<pair<vector<int>,int> > var_name(x, value); 

如果你喜歡你自己的語法,那麼你應該這樣做:

vector<pair<vector<int>,int> > var_name(x, std::make_pair(vector<int>(y), 0)); 
+0

真棒!有效。 – 2011-06-13 18:04:52

0

pair<vector<int>,int>是一個類型的名稱。對於初始化,你需要一個值。

您通過調用類型的構造函數來獲取值(與語句頂級相同,您正在爲var_name執行操作)。由於這是在表達式中創建一個內聯值,而不是初始化一個變量,所以沒有變量名,我們只是寫一些像pair<vector<int>,int>(...)這樣的東西。 ...是構造函數的參數(將(y)放在尖括號內的任何地方都是不合邏輯的)。在我們的例子中,我們希望第一個值是一個長度爲y的向量,第二個值是... 0,我假設。我們得到pair<vector<int>,int>(vector<int>(y), 0)。這相當笨拙,這就是爲什麼標準庫提供模板功能std::make_pair。它通過使用免費函數(其中可以推斷模板參數)來調用構造函數來解決建模器無法推斷出模板參數的事實。

因此,上述縮短到make_pair(vector<int>(y), 0),當它被替換成其餘的行,給本傑明林德利的答案。

1

您可以使用make_pair來自<utility>來構建想要初始化vector的對。例如:

vector< pair<vector<int>,int> > var_name(x, make_pair(vector<int>(y), 42))

或直接調用pair<vector<int>,int>構造函數(因爲它看起來像你想):

vector< pair<vector<int>,int> > var_name(x, pair<vector<int>,int>(vector<int>(y), 0))

相關問題