簡體   English   中英

C++:矢量<pair<vector<int> ,int&gt;&gt; </pair<vector<int>

[英]C++: vector <pair<vector<int>,int> >

這就是我的目標...

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

其中 x 是向量 var_name 的大小,y 是對內向量的大小。

上面的語句不起作用,因為 pair 模板只允許常量。 我怎樣才能讓我的向量分別設置為 x 和 y?

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

將其簡化為:

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));

您可以使用<utility>中的make_pair來構造您希望用來初始化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))

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

您可以通過調用該類型的構造函數來獲得一個值(與在語句的頂層您為var_name所做的方式相同)。 由於這是在表達式中內聯創建值,而不是初始化變量,因此沒有變量名稱,我們只需編寫類似pair<vector<int>,int>(...)的內容。 ...是構造函數的 arguments(將(y)放在尖括號內的任何位置都是不合邏輯的)。 在我們的例子中,我們希望第一個值是長度為 y 的向量,而第二個值是...... 0,我假設。

所以我們得到pair<vector<int>,int>(vector<int>(y), 0) 這相當笨拙,這就是標准庫提供模板 function std::make_pair的原因。 通過使用免費的 function(可以使用模板參數進行推斷)來調用構造函數,它繞過了模板 arguments 無法為構造函數推斷的事實。

因此,上面的內容縮短為make_pair(vector<int>(y), 0) ,當代入該行的 rest 時,給出了 Benjamin Lindley 的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM