为什么我重载了<运算符,但还是不能使用sort对结构体进行排序?
测试代码如下:#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct fun
{
int a;
int b;
fun()
{
a=0;
b=0;
}
bool operator < (fun sum)
{
return b < sum.b;
}
}; //定义结构提
int main()
{
fun s={};
for(int i=1;i<=10;i++)//对结构体变量进行赋值
{
s.a=rand()%20;
s.b=rand()%20;
}
sort(&s,&s);//排序
return 0;
}
错误信息:
In file included from /usr/include/c++/4.4/algorithm:62,
from test.cpp:2:
/usr/include/c++/4.4/bits/stl_algo.h: In function ‘const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) ’:
/usr/include/c++/4.4/bits/stl_algo.h:2268: instantiated from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) ’
/usr/include/c++/4.4/bits/stl_algo.h:5220: instantiated from ‘void std::sort(_RAIter, _RAIter) ’
test.cpp:32: instantiated from here
/usr/include/c++/4.4/bits/stl_algo.h:89: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
/usr/include/c++/4.4/bits/stl_algo.h:90: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
/usr/include/c++/4.4/bits/stl_algo.h:92: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
/usr/include/c++/4.4/bits/stl_algo.h:96: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
/usr/include/c++/4.4/bits/stl_algo.h:98: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
struct fun 用 类 吧
是class不是struct= = 小马哥。 发表于 2016-8-17 08:24
struct fun 用 类 吧
用类一样不行,而且结构体和类好像没什么区别吧,只是缺省下元素的访问权限一个是public一个是provide 黑龍 发表于 2016-8-17 09:42
是class不是struct= =
用类一样不行,而且结构体和类好像没什么区别吧,只是缺省下元素的访问权限一个是public一个是provide hyq510 发表于 2016-8-17 13:31
用类一样不行,而且结构体和类好像没什么区别吧,只是缺省下元素的访问权限一个是public一个是provide
{:5_99:}没完 你这个重载是怎么重载的= = 看看 本帖最后由 Krant5 于 2016-8-20 22:18 编辑
我改了一下没有错误了,至于对不对就不好说了,还是用类吧,另外,将重载运算符用友元函数类型才是正确的#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
class fun
{
public:
int a;
int b;
fun()
{
a=0;
b=0;
}
friend bool operator < (fun sum,fun sum1);
};
bool operator < (fun sum,fun sum1)
{
return sum.b < sum1.b;
} //定义结构提
int main()
{
fun s= {};
for(int i=1; i<=10; i++) //对结构体变量进行赋值
{
s.a=rand()%20;
s.b=rand()%20;
}
sort(&s,&s);//排序
return 0;
} Krant5 发表于 2016-8-20 22:17
我改了一下没有错误了,至于对不对就不好说了,还是用类吧,另外,将重载运算符用友元函数类型才是正确的
谢谢了,不过我更好奇的是为什么之前那个不行。
如果用之前那个结构体的话,单纯的测试<运算符也能正常工作,但是使用sort排序却不行。
哦,对了,你这个代码把class改成struct也并没有影响。
我记得struct和class的区别只是在于默认访问权限与继承方式。
刘汝佳的书里提到过。 #include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
class fun{
public:
int a;
int b;
fun():a(0),b(0){}
friend bool operator < (fun sum1,fun sum2)
{
return sum1.b < sum2.b;
}
}; //定义结构提
int main()
{
fun s={};
for(int i=1;i<=10;i++)//对结构体变量进行赋值
{
s.a=rand()%20;
s.b=rand()%20;
}
sort(s,s+10);//排序
return 0;
}
你的问题应该是重载小于运算的时候需要两个操作数。 iszhuangsha 发表于 2016-8-21 22:57
你的问题应该是重载小于运算的时候需要两个操作数。
谢谢哈
页:
[1]