2011-10-25 18 views
32

bir vektör ekleme Böyle böyle pair bir vector var:çiftinin

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

Ama gelir başlangıcı:

vector<pair<string,double>> revenue; 

Ben bir dize ve bunun gibi bir haritadan bir çift eklemek istediğiniz başlatılmamış, sınırlar dışı bir hatayla geliyor.

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

Ama bu iki argüman alamaz diyor: Ben böyle vector::push_back kullanarak çalıştı. Peki pair'un vector numarasına nasıl ekleyebilirim?

+0

Yani çiftleri bir vektör çifti ama bir çift vektör veya vektör yoktur. Bunu anladıktan sonra, problemini çözdün. –

cevap

76

Kullanım std::make_pair:

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

Peki ya emplace_back? –

+1

@ Mr.WorshipMe, bunu C++ 11'de kullanabilirsiniz. Bir örnek için aşağıdaki cevaba bakınız. Ne sorduğundan emin değilim. Ben daha zarif ve muhtemelen daha hızlı çözüme işaret ediyordu – avakar

+1

... Ben aşağıda altı puanlı yanıt ... Cevabını güncellemek isteyebilirsiniz görmedik ... –

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

Ama bu iki argüman alamaz diyor. Peki bu vektör çiftine nasıl ekleyebilirim?

Sen doğru yolda, ama bunu düşünmek; senin vektörün ne tutuyor? Kesinlikle bir dize ve bir konumda int tutmuyor, Pair tutuyor. Yani ...

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

IMHO, çok güzel bir çözüm ++ 11 emplace_back fonksiyonu c kullanmaktır:

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

Sadece bir yerde yeni bir öğe oluşturur.

4

Yoksa listeyi başlatmak kullanabilirsiniz:

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

başka geçici çifti kullanmayı deneyin:

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

gelir [i] yanlış! – bicepjai

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

bu işe yarar.