地图运算符 < 条件 - 无效比较器

Map operator < conditions - invalid comparator

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

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;

};

上面的class是我地图中的'key'。 两个子字符串的长度总是相同的。 某些条件是错误的,导致它还在大喊大叫'invalid comparator'。

你在比较函数代码中的 if 语句是一种令人费解的说法:

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

std::map 要求的比较函数不正确。请记住,您正在实施小于运算符,而不是等价。如果您希望您的子字符串按升序排序,请使用:

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

我建议在 substring class 中使用对 std::string 的 const 引用 - 这将反映出您不接受 nullptr 作为指针的事实并表明意图您不想通过此 class 更改原始字符串并使您的代码更清晰。