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)
可以返回相同的结果。只要结果为假,等价值的情况就是如此。