映射运算符<条件 - 无效的比较器



在插入映射时,我需要检查两个子字符串是否相等。这是代码:

class substring {
public:
    substring(string* str, int offset, int length) : str(str), offset(offset), length(length) {  }

    bool operator < (const substring& val) const {
        if (str->compare(offset, length, *val.str, val.offset, val.length) == 0) return false;
        else return true;
    }
    int offset, length;
    string* str;
};

上面的这个类是我地图上的一把"钥匙"两个子字符串的长度始终相同有些条件是错误的,因为它仍然在大喊"无效比较器"。

比较函数代码中的if语句是一种复杂的说法:

return str->compare(offset, length, *val.str, val.offset, val.length) != 0;

这对于CCD_ 1所需要的比较函数是不正确的。请记住,您实现的是小于运算符,而不是等价运算符。如果您希望您的子字符串按升序排序,请使用以下命令:

return str->compare(offset, length, *val.str, val.offset, val.length) < 0;

我建议在substring类中使用对std::string的const引用,这将反映出您不接受nullptr作为指针的事实,并表明您不想通过该类更改原始字符串并使代码更干净。

最新更新