c++ - saber - ¿Cómo encontrar si un elemento existe en std:: map?
saber si existe un elemento javascript (9)
Además de las respuestas con iterator-Value de find () y de comparación con .end (), hay otra forma: map :: count.
Puede llamar a map :: count (key) con una clave específica; devolverá cuántas entradas existen para la clave dada. Para mapas con claves únicas, el resultado será 0 o 1. Como multimap también existe con la misma interfaz, mejor compare con! = 0 para que la existencia sea segura.
para su ejemplo, eso es
return (cars.count(name)>0);
Las ventajas que veo son 1. código más breve, 2. beneficio de las optimizaciones que la biblioteca pueda aplicar internamente, usando sus detalles de representación.
Mi caso de uso:
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 sugerir la mejor y más elegante forma de hacerlo en C ++? Gracias.
Claro, usa un iterador
map<string,Car>::const_iterator it = cars.find(name);
return it!=cars.end();
Qué pasa:
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
funcione con cualquier contenedor estándar a través de std::find
y use una versión especial para std::map
ya que ofrece una alternativa de búsqueda más eficiente. Puede agregar especializaciones adicionales según sea necesario (por ejemplo, para std::set
y otros).
También podrías usar
bool exists(const string& name) {
return cars.count(name) != 0;
}
std::map::find(const key_type& x );
Devuelve map::end
si el elemento no existe.
#define itertype(v) typeof((v).begin())
itertype(cars) it = cars.find(name);
return it != cars.end();
bool exists(const std::map<std::string, Car>& cars, const std::string& name) {
return cars.end() != cars.find(name);
}
bool exists(const string& name)
{
return cars.find(name) != cars.end();
}
return cars.find(name) != cars.end();