51 votos

Cómo saber si un elemento existe en std::map?

Mi caso:

map<string, Car> cars;
bool exists(const string& name) {
  // somehow I should find whether my MAP has a car
  // with the name provided
  return false;
} 

Podría usted por favor, sugiera la mejor y la manera más elegante de hacerlo en C++? Gracias.

73voto

KennyTM Puntos 232647
return cars.find(name) != cars.end();

55voto

Tom Puntos 16783

Seguro, utilizar un iterador

map<string,Car>::const_iterator it = cars.find(name);
return it!=cars.end();

25voto

Usted también podría usar

bool exists(const string& name) {
  return cars.count(name) != 0;
} 

7voto

D.Shawley Puntos 30324

¿Qué acerca de:

template <typename KeyType, typename Collection>
bool exists_in(Collection const& haystack, KeyType const& needle) {
    return std::find(haystack.begin(), haystack.end(), needle) != haystack.end();
}

template <typename K, typename V>
bool exists_in(std::map<K,V> const& haystack, K const& needle) {
    return haystack.find(needle) != haystack.end();
}

Esto hace que exists_in trabajar con cualquier contenedor estándar a través de std::find y el uso de una versión especial para std::map , ya que ofrece una más eficiente la búsqueda de alternativas. Se podría añadir especializaciones adicionales como sea necesario (por ejemplo, std::set y otros).

5voto

Mike Seymour Puntos 130519
bool exists(const string& name)
{
    return cars.find(name) != cars.end();
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X