HOWTO · C++

Añadir elemento al vector de pares en C++

Este artículo demuestra cómo añadir un elemento a un vector de pares en C++

En esta página

Para añadir un elemento de dos valores a un vector de pares de C++, declara cada elemento como std::pair<T1, T2> y agrega un valor de par compatible con push_back, o pasa sus dos argumentos de construcción a emplace_back. Los tipos de los componentes del par pueden ser distintos, por ejemplo, una clave entera y un valor de cadena.

Representar un vector de pares

Una declaración como std::vector<std::pair<int, std::string>> describe un vector cuyos elementos son pares: cada par contiene un int y un std::string. Los dos valores pertenecen a cada elemento; no indican la cantidad de elementos del vector. Incluye <vector>, <utility> y <string> para estos tipos y las operaciones con pares. El ejemplo también usa <iostream> para imprimir el resultado.

La lista de inicialización crea el vector con dos elementos. Cada grupo de llaves anidado inicializa un par, así que {12, "twelve"} es un elemento cuyo primer valor es un entero y cuyo segundo es una cadena. Por tanto, el vector tiene dos elementos antes de ejecutar las operaciones para añadir otros. Cada par nuevo se agrega al final y los elementos anteriores conservan su orden.

Añadir un par con push_back

push_back añade al vector un valor de par. std::make_pair permite crear ese valor cómodamente a partir de los argumentos proporcionados, pero no es imprescindible: también se puede pasar un std::pair<int, std::string> con tipo explícito. En ambos casos, el valor debe ser compatible con el tipo de elemento del vector. El ejemplo muestra las dos formas y luego imprime los miembros first y second de cada par para que puedas ver los elementos añadidos.

La variable con tipo explícito deja claros los tipos de sus componentes: el primero es un int y el segundo, un std::string. Al pasar esa variable a push_back, su valor de par se copia en el vector. Si necesitas conservar una variable de par para usarla más adelante, esta forma te permite seguir disponiendo de la variable original después de añadirla.

Ejecuta este ejemplo para comparar las formas de inserción. La ejecución proporcionada terminó correctamente con código de salida 0 e imprimió estos cinco pares, en este orden. Los valores de cadena de la salida permanecen en inglés:

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

Construir un par en el sitio con emplace_back

emplace_back añade un elemento reenviando sus argumentos para construir al final el elemento de par del vector. Para std::pair<int, std::string>, pasar un entero y un valor compatible con una cadena proporciona los dos argumentos del constructor del par. El tipo del elemento debe poder construirse a partir de los argumentos que proporciones. En el ejemplo compartido, emplace_back(88, "eighty-eight") construye y añade el par sin tener que declarar antes una variable de par independiente.

Elegir entre push_back y emplace_back

Usa push_back cuando ya tengas un valor de par, tanto si procede de std::make_pair como de un std::pair con tipo explícito. Usa emplace_back cuando quieras proporcionar directamente los argumentos para construir el nuevo par. Ambas operaciones añaden un elemento al vector; elige según si tu código ya tiene un valor de par o los valores con los que construirlo. Esta diferencia describe cómo se proporciona el elemento, no garantiza que una operación sea más rápida que la otra.