You were on the right track, the find
function can help you; but if you want to generalize the search for any container (set, list or map) you should consider using generic functions such as std::find
:
template <typename contenedor_t, typename valor_t>
bool contenedor_contiene(const contenedor_t &contenedor, const valor_t &valor)
{
return std::find(std::begin(contenedor), std::end(contenedor), valor) != std::end(contenedor);
}
You can use the above code with any non-associative container:
std::set<Coordenada> s{{1,2}, {3,4}, {5,6}, {7,8}, {9,0}};
std::list<Coordenada> l{{1,2}, {3,4}, {5,6}, {7,8}, {9,0}};
std::vector<Coordenada> v{{1,2}, {3,4}, {5,6}, {7,8}, {9,0}};
std::array<Coordenada, 5> a{{{1,2}, {3,4}, {5,6}, {7,8}, {9,0}}};
Coordenada c[]{{1,2}, {3,4}, {5,6}, {7,8}, {9,0}};
std::cout << contenedor_contiene(s, Coordenada{0,9}); // Falso
std::cout << contenedor_contiene(s, Coordenada{9,0}); // Verdadero
std::cout << contenedor_contiene(l, Coordenada{0,9}); // Falso
std::cout << contenedor_contiene(l, Coordenada{9,0}); // Verdadero
std::cout << contenedor_contiene(v, Coordenada{0,9}); // Falso
std::cout << contenedor_contiene(v, Coordenada{9,0}); // Verdadero
std::cout << contenedor_contiene(a, Coordenada{0,9}); // Falso
std::cout << contenedor_contiene(a, Coordenada{9,0}); // Verdadero
std::cout << contenedor_contiene(c, Coordenada{0,9}); // Falso
std::cout << contenedor_contiene(c, Coordenada{9,0}); // Verdadero
For associative containers you must specify where to look for the value, I assume that it is in the value (not in the key):
template <typename contenedor_asociativo_t, typename valor_t>
bool contiene_en_valor(const contenedor_asociativo_t &contenedor, const valor_t &valor)
{
return std::find_if(std::begin(contenedor), std::end(contenedor),
[&](auto &kv) { return kv.second == valor; }) != std::end(contenedor);
}
You can use the above code with associative containers:
std::map<int, Coordenada> m;
m.insert({0, {1,2}});
m.insert({0, {3,4}});
std::cout << contiene_en_valor(m, Coordenada{4,3}); // Falso
std::cout << contiene_en_valor(m, Coordenada{3,4}); // Verdadero
The examples assume that Coordenada
has an equity operator ( ==
).