2011-10-25 2 views
32

의 벡터에 추가 I는 같은 pairvector 있습니다

revenue[i].first = "string"; 
revenue[i].second = map[i].second; 

그러나 수익 가입일 :

vector<pair<string,double>> revenue; 

내가 문자열이 같은 맵에서 두 번 추가 할 초기화되지 않으면 범위를 벗어난 오류가 발생합니다.

revenue.push_back("string",map[i].second); 

을하지만 그 두 개의 인수를 취할 수 없다고 : 그래서 나는이 같은 vector::push_back를 사용했습니다. 그렇다면이 vectorpair에 어떻게 추가 할 수 있습니까?

+0

따라서 벡터 쌍은 없지만 쌍 벡터 또는 쌍 벡터가 없습니다. 이것을 이해하면 문제를 해결할 수 있습니다. –

답변

76

사용 std::make_pair :

revenue.push_back(std::make_pair("string",map[i].second)); 
+1

emplace_back은 어떤가요? –

+1

@ Mr.WorshipMe, C++ 11에서 사용할 수 있습니다. 예를 보려면 아래 답변을 참조하십시오. 네가 무엇을 요구하는지 모르겠다. – avakar

+1

좀 더 우아하고 빠른 솔루션을 가리키고 있습니다 ... 아래의 등급이 낮은 대답을 보지 못했습니다 ... 대답을 업데이트하고 싶을 수도 있습니다 ... –

9
revenue.pushback("string",map[i].second); 

하지만 그 두 개의 인수를 취할 수 없다고. 그렇다면이 벡터 쌍에 어떻게 추가 할 수 있습니까?

올바른 길을 가고 있지만 그것에 대해 생각해보십시오. 당신의 벡터는 무엇을 보유합니까? 확실히 하나의 위치에 문자열과 int를 보유하지 않으며, Pair을 보유합니다. 그래서 ...

revenue.push_back(std::make_pair("string", map[i].second));  
20

IMHO는 아주 좋은 솔루션 ++ 11 emplace_back 기능 c를 사용하는 것입니다

revenue.emplace_back("string", map[i].second); 

그냥 자리에 새로운 요소를 작성합니다.

4

또는 목록 초기화 사용할 수 있습니다

revenue.push_back({"string", map[i].second}); 
-2

다른 임시 쌍을 사용하십시오 :

pair<string,double> temp; 
vector<pair<string,double>> revenue; 

// Inside the loop 
temp.first = "string"; 
temp.second = map[i].second; 
revenue[i].push_back(temp); 
+0

수익 [i]가 잘못되었습니다! – bicepjai

1
revenue.push_back(pair<string,double> ("String",map[i].second)); 

이 작동합니다.