C++ 为什么不可以使用;返回lhs.size()==rhs.size();在std::sort()比较函数中?

C++ 为什么不可以使用;返回lhs.size()==rhs.size();在std::sort()比较函数中?,c++,C++,正如标题所说,我编写了一个测试演示 bool comp(string lhs, string rhs) { return lhs.size() < rhs.size(); } bool comp1(string lhs, string rhs) { return lhs.size() == rhs.size(); } int main(int argc, const char *argv[]) { string str[] = {"dog", "is", "ca

正如标题所说,我编写了一个测试演示

bool comp(string lhs, string rhs) {
    return lhs.size() < rhs.size();
}

bool comp1(string lhs, string rhs) {
    return lhs.size() == rhs.size();
}

int main(int argc, const char *argv[]) {
    string str[] = {"dog", "is", "cat", "elephant", "fish", "cow"};
    std::sort(str, str + 6, comp1);
    output();
}
bool comp(字符串左侧、字符串右侧){
返回lhs.size()
输出:
猫狗是象鱼牛

应为:
…猫-狗-牛…


我想把这些大小相同的字符串放在一起,但它不起作用,有什么问题吗?

==
不构成一个字符串。根据您的描述,以下内容应该是理想的:

bool comp(string const& lhs, string const& rhs) {
    return lhs.size() < rhs.size();
}
bool comp(字符串常量和左侧、字符串常量和右侧){
返回lhs.size()
或者,如果要对相同长度的字符串进行字典排序:

bool comp(string const& lhs, string const& rhs) {
    return
        lhs.size() < rhs.size()
     || (lhs.size() == rhs.size() && lhs < rhs);
}
bool comp(字符串常量和左侧、字符串常量和右侧){
返回
lhs.size()
为了进一步阅读,这里有一篇我最喜欢的文章:

因为
comp1(a,b)
comp1(b,a)
都可以返回
true
,这是不允许的。声明:

comp-返回的比较函数对象(即满足的要求的对象)​如果第一个参数小于第二个参数(即排序早于第二个参数),则为true

在链接到的下面,我们还可以看到:

与以下属性建立关系
*对于所有a,comp(a,a)=false
*如果comp(a,b)=true,则comp(b,a)=false
*如果comp(a,b)=真且comp(b,c)=真,则comp(a,c)=真

您的第一个函数
comp
满足这些要求:没有两个对象可以返回
true
。如果
comp(a,b)
返回
true,
comp(b,a)
返回
false
;但是,第二个函数comp1中的情况并非如此
comp1(a,b)
可以返回
true
,也可以返回
comp(b,a)
,因此
sort
永远不会完成,因此它不会编译

你说

我想把同样大小的绳子放在一起


但是仅仅使用
运算符,您收到的输出是什么?您所说的“将相同大小的字符串放在一起”是什么意思?使用第一个
comp
函数排序不就是这样吗?因为相等不是排序。第一个函数有什么问题?您的参数是
a
b
,您正在尝试比较
lhs
rhs
。当您引入不相关的更改,例如将参数类型更改为
const&
,解释原因很有帮助。除此之外,您更改的
comp1
是OP知道的工作原理:它是OP的
comp
函数。
comp(a,b)
comp(b,a)
可以返回相同的结果。只要结果为假,等价值的情况就是如此。