HOWTO · C++

Aggiungi elemento al vettore di coppie in C++

Questo articolo mostra come aggiungere un elemento a un vettore di coppie in C++

In questa pagina

Per aggiungere un elemento con due valori a un vettore C++ di coppie, rappresenta ogni elemento come std::pair<T1, T2> e aggiungi un valore coppia compatibile con push_back, oppure passa i due argomenti del costruttore a emplace_back. I tipi dei componenti della coppia possono essere diversi, per esempio una chiave intera e un valore stringa.

Rappresentare un vettore di coppie

Una dichiarazione come std::vector<std::pair<int, std::string>> descrive un vettore i cui elementi sono coppie: ciascuna contiene un int e uno std::string. I due valori appartengono a ogni elemento; non indicano il numero di elementi nel vettore. Per usare questi tipi e le operazioni sulle coppie, includi <vector>, <utility> e <string>. L’esempio seguente usa anche <iostream> per stampare il risultato.

La lista di inizializzazione crea il vettore con due elementi. Ogni gruppo di parentesi graffe annidato inizializza una coppia, quindi {12, "twelve"} è un elemento con un intero come primo valore e una stringa come secondo. Prima delle operazioni di aggiunta, la dimensione del vettore è quindi due. Ogni nuovo elemento viene aggiunto in fondo, mentre quelli precedenti mantengono l’ordine originale.

Aggiungere una coppia con push_back

push_back aggiunge al vettore un valore coppia. std::make_pair è un modo pratico per creare quel valore a partire dagli argomenti forniti, ma non è obbligatorio: si può passare anche un std::pair<int, std::string> con tipo esplicito. In entrambi i casi, il valore deve essere compatibile con il tipo degli elementi del vettore. L’esempio mostra entrambe le forme e poi stampa i membri first e second di ogni coppia, così da rendere visibili gli elementi aggiunti.

La variabile con tipo esplicito chiarisce i tipi dei componenti: il primo valore è un int e il secondo uno std::string. Passandola a push_back, il suo valore coppia viene copiato nel vettore. Se vuoi conservare una variabile coppia per usarla in seguito, questa forma lascia disponibile la variabile originale dopo l’aggiunta.

Esegui l’esempio per confrontare le forme di inserimento. L’esecuzione fornita è terminata correttamente con codice di uscita 0 e ha stampato queste cinque coppie, nell’ordine indicato. I valori testuali visibili nei blocchi di codice e di output, come twelve, thirty-two, fifty-five, seventy ed eighty-eight, restano in inglese perché quei blocchi sono mantenuti identici all’originale.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

int main() {
  std::vector<std::pair<int, std::string>> items = {
      {12, "twelve"}, {32, "thirty-two"}};

  items.push_back(std::make_pair(55, std::string("fifty-five")));
  std::pair<int, std::string> next{70, "seventy"};
  items.push_back(next);
  items.emplace_back(88, "eighty-eight");

  for (const auto& item : items) {
    std::cout << '(' << item.first << ", " << item.second << ")\n";
  }
}
(12, twelve)
(32, thirty-two)
(55, fifty-five)
(70, seventy)
(88, eighty-eight)

Costruire una coppia sul posto con emplace_back

emplace_back aggiunge un elemento inoltrando i suoi argomenti per costruire in fondo al vettore l’elemento di tipo coppia. Per std::pair<int, std::string>, passare un intero e un valore compatibile con std::string fornisce i due argomenti del costruttore della coppia. Il tipo dell’elemento deve poter essere costruito a partire dagli argomenti forniti. Nell’esempio condiviso, emplace_back(88, "eighty-eight") costruisce e aggiunge la coppia senza prima assegnarla a una variabile separata.

Scegliere tra push_back e emplace_back

Usa push_back quando hai già un valore coppia, ottenuto con std::make_pair oppure rappresentato da un std::pair con tipo esplicito. Usa emplace_back quando vuoi fornire direttamente gli argomenti del costruttore della nuova coppia. Entrambe le operazioni aggiungono un elemento al vettore: scegli in base al fatto che il tuo codice disponga già di un valore coppia o dei valori con cui costruirne uno. La differenza riguarda il modo in cui viene fornito l’elemento e non garantisce che una delle due operazioni sia più veloce.