Usa la funzione std::map::find in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione std::map::find per trovare l’elemento con un determinato valore chiave in C++
  2. Usa la funzione membro contains per verificare se l’elemento dato esiste in una mappa in C++
Usa la funzione std::map::find in C++

Questo articolo spiega come utilizzare la funzione std::map::find e alcune delle sue alternative in C++.

Usa la funzione std::map::find per trovare l’elemento con un determinato valore chiave in C++

L’oggetto std::map è uno dei contenitori associativi nella libreria di modelli standard C++ e implementa una struttura dati ordinata, memorizzando i valori delle chiavi. Nota che le chiavi sono univoche nel contenitore std::map. Pertanto, se vengono inseriti nuovi elementi con le chiavi esistenti, l’operazione non ha alcun effetto. Tuttavia, alcune funzioni membro speciali nella classe std::map possono assegnare nuovi valori alle coppie esistenti se le chiavi sono abbinate (es. funzione insert_or_assign).

I vantaggi del contenitore std::map includono operazioni di ricerca, inserimento e rimozione veloci, che possono essere condotte in tempo logaritmico. L’operazione di ricerca è fornita dal membro find, che accetta un riferimento a una chiave. Se la chiave data viene trovata nell’oggetto std::map, viene restituito l’iteratore all’elemento corrispondente. D’altra parte, supponendo che la chiave data non venga trovata nel contenitore, viene restituito l’iteratore passato alla fine (map::end()).

Il seguente frammento di codice mostra un semplice scenario di utilizzo in cui un contenitore map di coppie string viene inizializzato con valori arbitrari, quindi viene cercata la chiave con il valore "h". Di conseguenza, elaboriamo l’iteratore restituito con l’istruzione if-else per stampare la coppia di elementi o emettere un messaggio che la chiave data non è stata trovata.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  auto item = m1.find(key);
  if (item != m1.end()) {
    cout << "Key exists!  -  {" << item->first << ";" << item->second << "}\n";
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Key exists !-{
  h;
  htop
}

Usa la funzione membro contains per verificare se l’elemento dato esiste in una mappa in C++

Se l’utente ha bisogno di confermare se la coppia con il valore dato esiste nell’oggetto map, si può utilizzare la funzione membro contains. La funzione fa parte del contenitore std::map dalla versione C++20, quindi dovresti conoscere la versione del compilatore per eseguire il seguente frammento di codice. La funzione contains prende un riferimento alla chiave e restituisce il valore bool true se trovato. Anche la complessità temporale di questa funzione membro è logaritmica.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.contains(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Key Exists!

In alternativa, si può usare la funzione membro cout per verificare se la coppia di elementi con la chiave data esiste nella map. Generalmente, la funzione cout viene utilizzata per recuperare il numero di elementi con la chiave data, ma poiché std::map memorizza solo valori di chiave univoci, il processo restituisce 1 se l’elemento viene trovato. In caso contrario, viene restituito un valore zero per indicare che non è stato trovato alcun elemento.

#include <iostream>
#include <map>

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

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.count(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Produzione:

Key Exists !
Autore: 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

Articolo correlato - C++ Map