Вы можете использовать std::find_if
с лямбда-выражением:
auto it = std::find_if(mapVariable.begin(), mapVariable.end(), [](const auto& pair) {
return pair.first.a == 1; // first is the key, second is the value
});
Или без использования лямбда-выражения:
struct Functor {
bool operator()(const decltype(mapVariable)::value_type& pair) const {
return pair.first.a == 1;
}
};
auto it = std::find_if(mapVariable.begin(), mapVariable.end(), Functor{});
Затем проверьте, есть ли совпадение :
if(it != mapVariable.end()) {
// match found
}
Чтобы использовать перегрузку size_type std::map::count( const K& x ) const
, функция сравнения, используемая на карте, должна быть прозрачной.
Пример:
struct Compare {
using is_transparent = int;
bool operator()(int x, const KeyClass& b) const {
return x < b.a;
}
bool operator()(const KeyClass& a, int x) const {
return a.a < x;
}
bool operator()(const KeyClass& a, const KeyClass& b) const {
return a.a < b.a;
}
};
//...
std::map<KeyClass, SomeOtherClass, Compare> mapVariable;
//...
if(mapVariable.count(1)) {
// match found
}