为什么std :: map的比较器必须是const?

时间:2014-01-16 07:59:13

标签: c++ xlc

我为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())不是const函数,即

 bool operator() (const std::string& op1, const std::string& op2);

编译器XLC编译器生成错误

CaseInsensitiveCmp::operator()(const std::string &, const std::string &)" is not a viable candidate.

任何人都可以参考c ++标准中的任何一点,说比较功能对象成员函数必须是const?

0 个答案:

没有答案