鱼C论坛

 找回密码
 立即注册
查看: 6828|回复: 10

为什么我重载了<运算符,但还是不能使用sort对结构体进行排序?

[复制链接]
发表于 2016-8-17 03:08:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
测试代码如下:
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdlib>
  4. using namespace std;

  5. struct fun
  6. {
  7.         int a;
  8.         int b;
  9.         
  10.         fun()
  11.         {
  12.                 a=0;
  13.                 b=0;
  14.         }
  15.         
  16.         bool operator < (fun sum)   
  17.         {
  18.                 return b < sum.b;
  19.         }
  20. };   //定义结构提  

  21. int main()
  22. {
  23.         fun s[20]={};
  24.         for(int i=1;i<=10;i++)  //对结构体变量进行赋值
  25.         {
  26.                 s[i].a=rand()%20;
  27.                 s[i].b=rand()%20;
  28.         }
  29.         
  30.         sort(&s[1],&s[11]);  //排序
  31.         return 0;
  32. }
复制代码




错误信息:
  1. In file included from /usr/include/c++/4.4/algorithm:62,
  2.                  from test.cpp:2:
  3. /usr/include/c++/4.4/bits/stl_algo.h: In function ‘const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = fun]’:
  4. /usr/include/c++/4.4/bits/stl_algo.h:2268:   instantiated from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = fun*, _Size = int]’
  5. /usr/include/c++/4.4/bits/stl_algo.h:5220:   instantiated from ‘void std::sort(_RAIter, _RAIter) [with _RAIter = fun*]’
  6. test.cpp:32:   instantiated from here
  7. /usr/include/c++/4.4/bits/stl_algo.h:89: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
  8. /usr/include/c++/4.4/bits/stl_algo.h:90: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
  9. /usr/include/c++/4.4/bits/stl_algo.h:92: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
  10. /usr/include/c++/4.4/bits/stl_algo.h:96: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
  11. /usr/include/c++/4.4/bits/stl_algo.h:98: error: passing ‘const fun’ as ‘this’ argument of ‘bool fun::operator<(fun)’ discards qualifiers
复制代码







小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-17 13:30:54 | 显示全部楼层

用类一样不行,而且结构体和类好像没什么区别吧,只是缺省下元素的访问权限一个是public一个是provide
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-17 13:31:39 | 显示全部楼层
黑龍 发表于 2016-8-17 09:42
是class不是struct= =

用类一样不行,而且结构体和类好像没什么区别吧,只是缺省下元素的访问权限一个是public一个是provide
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-21 04:53:27 | 显示全部楼层
Krant5 发表于 2016-8-20 22:17
我改了一下没有错误了,至于对不对就不好说了,还是用类吧,另外,将重载运算符用友元函数类型才是正确的

谢谢了,不过我更好奇的是为什么之前那个不行。
如果用之前那个结构体的话,单纯的测试<运算符也能正常工作,但是使用sort排序却不行。


哦,对了,你这个代码把class改成struct也并没有影响。
我记得struct和class的区别只是在于默认访问权限与继承方式。
刘汝佳的书里提到过。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-22 03:08:59 | 显示全部楼层
iszhuangsha 发表于 2016-8-21 22:57
你的问题应该是重载小于运算的时候需要两个操作数。

谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表