2011-10-25 9 views
32

Tengo un vector de pair como tales:Adición de un vector de par

vector<pair<string,double>> revenue; 

Quiero añadir una cadena y un doble de un mapa como éste:

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

Pero ya que los ingresos no se inicializa, aparece un error fuera de límites. Así que he intentado usar vector::push_back así:

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

Pero que dice que no puede tomar dos argumentos. Entonces, ¿cómo puedo agregar a este vector de pair?

+0

Así que no tienes un par de vectores sino un par de vectores, o un vector de pares. Una vez que comprenda esto, habrá resuelto su problema. –

Respuesta

76

Uso std::make_pair:

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

¿Qué pasa con emplace_back? –

+1

@ Mr.WorshipMe, puede usarlo en C++ 11. Vea una respuesta a continuación para un ejemplo. Aunque no estoy seguro de lo que estás preguntando. – avakar

+1

Estaba apuntando a una solución más elegante y posiblemente más rápida ... No vi la respuesta infravalorada a continuación ... Es posible que desee actualizar su respuesta ... –

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

Pero eso no dice no puede tomar dos argumentos. Entonces, ¿cómo puedo agregar a este par de vectores?

Estás en el camino correcto, pero piénsalo; ¿Qué contiene tu vector? Ciertamente no contiene una cadena y una int en una posición, tiene un Pair. Así que ...

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

en mi humilde opinión, una muy buena solución es utilizar la función C++ 11 emplace_back:

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

sólo crea un nuevo elemento en su lugar.

4

O puede utilizar la lista de inicializar:

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

Intente usar otro par temporal:

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

¡los ingresos [i] están equivocados! – bicepjai

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

esto va a funcionar.

Cuestiones relacionadas