Хотя итератору не нужна функция сравнения, итератор, скажем, для std::map<char,int,std::less<char>>
, как правило, является совершенно другим типом, чем итератор, скажем, для std::map<char,int,std::greater<char>>
, поскольку тип итератора определяется внутри конкретного типа карты ипоэтому на нем.
A std::map<K,T>
на самом деле является сокращением для std::map<K,T,std::less<K>,std::allocator<std::pair<const K,T>>>
.Поэтому, если компаратор вашей карты отличается от компаратора по умолчанию (который в вашем случае равен std::less<char>
), вам необходимо явно создавать экземпляр типа карты вместе с ним при каждом его использовании.