Почему компаратор std::map должен быть константным?
Я написал компаратор функциональный объект для std::map
для сравнения строки без учета регистра.
class CaseInsensitiveCmp
{
public:
bool operator() (const std::string& op1, const std::string& op2) const
{
std::string op1low(op1.size(),'c'), op2low(op2.size(),'c');
std::transform(op1.begin(), op1.end(),op1low.begin(),::tolower);
std::transform(op2.begin(), op2.end(),op2low.begin(),::tolower);
return op1low<op2low;
}
};
Проблема в том, что если функция-член (operator()) не является константной функцией, т.е.
bool operator() (const std::string& op1, const std::string& op2);
Компилятор XLC компилятор генерирует ошибку en
CaseInsensitiveCmp::operator()(const std::string &, const std::string &)" is not a viable candidate.
Кто-нибудь может сослаться на любой пункт в стандарте C++, который говорит, что функция-член функционального объекта сравнения должна быть const?