在插入映射时,我需要检查两个子字符串是否相等。这是代码:
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
作为指针的事实,并表明您不想通过该类更改原始字符串并使代码更干净。