std::map
имеет вложенный тип, называемый value_type
, который на самом деле является typedef, равным std::pair<const K, V>
.И std::pair
имеет два вложенных типа first_type
и second_type
.Используйте эту информацию как:
template<class T>
typename T::const_iterator map_max_element(const T & A)
{
typedef typename T::value_type pair_type;
typedef typename pair_type::first_type K;
typedef typename pair_type::second_type V;
return std::max_element(A.begin(), A.end(), pairCompare<K,V>);
}
Обратите внимание, что в вашем коде неверный тип возврата.Это должно быть const_iterator
, а не iterator
, потому что в функции A
есть const map.Отсюда вы можете получить const_iterator
.: -)
Или вы можете просто написать функцию сравнения как:
template<class T>
bool pairCompare(const T & x, const T & y) {
return x.second < y.second;
}
И использовать ее как:
return std::max_element(A.begin(), A.end(), pairCompare<typename T::value_type>);