Use um contêiner de mapa STL em C++

Jinku Hu 12 outubro 2023
  1. Use std::map para declarar um objeto Map Container em C++
  2. Use a função de membro find para pesquisar um elemento específico em um mapa em C++
  3. Use a função de membro insert para armazenar um elemento em um mapa em C++
  4. Use a função de membro merge para unir elementos de dois objetos de mapa em C++
Use um contêiner de mapa STL em C++

Este guia mostrará vários métodos de como usar o contêiner de mapa STL em C++.

Use std::map para declarar um objeto Map Container em C++

O contêiner std::map implementa uma estrutura de dados de par chave-valor classificada, onde as chaves são únicas. Os valores-chave classificam os elementos do par em ordem crescente por padrão; entretanto, o usuário pode opcionalmente passar uma função de comparação para o modelo std::map. Você pode inicializar o objeto map com uma lista de valores onde cada elemento é especificado em colchetes separados. Nesse caso, criamos um mapa de pares de strings e, em seguida, imprimimos os elementos dele no fluxo cout. Observe que cada elemento é acessado como membros std::pair no loop for.

#include <iostream>
#include <map>

using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  printMap(m1);

  return EXIT_SUCCESS;
}

Resultado:

11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Use a função de membro find para pesquisar um elemento específico em um mapa em C++

A função de membro find é útil para pesquisar um par de valores-chave específico no contêiner map. A operação de pesquisa tem complexidade logarítmica. A função find leva a referência a uma chave e retorna o iterador para o elemento com a chave equivalente. Quando nenhum elemento é encontrado com a chave fornecida, um iterador ultrapassado é retornado.

O fragmento de código a seguir demonstra como inicializar um novo contêiner map com os iteradores de intervalo. Observe que o primeiro iterador é recuperado usando a função find. Além disso, pode ser útil verificar a validade do iterador retornado.

#include <cassert>
#include <iostream>
#include <map>

using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m2(m1.find("11700K"), m1.end());
  printMap(m2);

  auto ret = m1.find("11700K");
  assert(ret != m1.end());
  std::map<string, string> m3(ret, m1.end());
  printMap(m3);

  return EXIT_SUCCESS;
}

Resultado:

11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Use a função de membro insert para armazenar um elemento em um mapa em C++

Você pode adicionar novos elementos ao contêiner map existente usando a função de membro insert. O membro insert leva a referência ao objeto a ser adicionado e retorna um contêiner std::pair que consiste em um iterador para o elemento inserido e um valor bool indicando o status da inserção bem-sucedida. Quando a inserção falha, o iterador aponta para o elemento que impediu a operação.

#include <iostream>
#include <map>

using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  auto ret1 = m1.insert({"1390P", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }

  ret1 = m1.insert({"1390", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }
  printMap(m1);

  return EXIT_SUCCESS;
}

Resultado:

Not inserted !11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;

Use a função de membro merge para unir elementos de dois objetos de mapa em C++

A função de membro merge pode ser utilizada para unir os elementos de dois contêineres de mapa. É chamado a partir do objeto map que precisa armazenar os elementos combinados e recebe outro map como argumento. Após a operação, todos os ponteiros e referências aos elementos transferidos são válidos.

#include <iostream>
#include <map>

using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m4 = {
      {"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};

  m1.merge(m4);
  printMap(m1);

  return EXIT_SUCCESS;
}

Resultado:

11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Map