2011-06-13 7 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로 가져갈 수 있습니까? 당신이 당신의 자신의 구문을 좋아하는 경우에 당신이 일을해야

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

:

답변

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

니스! make_pair ... 왜 그렇게 생각하지 않았 니? –

1

는로 단순화

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

신난다! 그것은 효과가 있었다. –

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)으로 줄 었으며 나머지 줄에 대입하면 Benjamin Lindley의 답을 얻습니다.

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

관련 문제