list的排序问题


在STL中,排序是个很重要的话题。
1.algorithm 里的sort()只接收RandomAccessIterator
用于像vector,dequeue的排序,而list的排序却不能使用泛型算法sort。
但是,list类中有自带的sort函数,且有两个版本的sort函数;
一个不接受参数,另一个接受一个比较函数。
我们一般是用第二个函数,然后自己写一个适合自己类型的比较函数。
如: 
  bool greater(const Polyelem& a, const Polyelem& b) const
   {
  int result = Compare(a,b); //该函数是自己写的,如果a小于b返回1,等于返回0,大于返回-1
  if(result==-1)
   return true;
  else
   return false;
   }

然后在调用sort时用语句list.sort(greater);
然而,调用时用出错,说是greater函数的类型不能转换成与sort匹配的类型。
于是上网查了查,有牛人说是list的sort函数会调用一个固定自带的greater函数。
文章还指出了解决方法:特化greater函数,将上述函数改成:
namespace std
{
 struct greater<Polyelem> : binary_function<Polyelem, Polyelem, bool>
 {
   bool operator()(const Polyelem& a, const Polyelem& b) const
   {
  int result = Compare(a,b);
  if(result==-1)
   return true;
  else
   return false;
   }
    };
}
这样还不行,还是会显示greater重定义错误。
解决方法是将greater紧跟着放在Polyelem的声明之后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值