使用c++的 list.sort()进行排序



c++ list sort方法 在VC6中使用自定义的比较函数出错处理
2008/12/21 16:32

VC6是很古董的开发工具。。但是还是还是有人在用,今天就遇到一个很无语的问题。。

如果用这里的代码 http://dev.csdn.net/article/19/19643.shtm 在VC6中编译,会出现No constructor could take the source type, or constructor overload resolution was ambiguous 的错误,原因很简单。。VC6的STL是1998年以前的古董。。所以不兼容C++标准。。用VC7以上或者G++就没有问题。。

上面的链接里面的作者是修改了list文件里面sort和merge函数,偶是不推荐这样啦。。还是按下面这样写好一点

#include <list>
#include <string>
#include <functional>
#include <iostream>
 
struct S {
         std::string firstname;
         std::string secondname;
         int ID;
      bool operator < (S & b) {
       return ID < b.ID;
      }
 // 重新定义小于,因为默认的sort函数调用的操作符是<,所以我们只需要重载 < 就好了
};
int main(int argc, char* argv[])
{
 
 std::list<S> mylist;
 
 std::list<S>::iterator iter;
 
 S a;
 
 a.firstname ="dfadf";
 
 a.ID = 5;
 
 mylist.push_back (a);
 
 
 
 a.firstname ="得到";
 
 a.ID = 9;
 
 mylist.push_back (a);
 
 
 
 a.firstname ="xxx";
 
 a.ID = 7;
 
 mylist.push_back (a);
 
 
 
 a.firstname ="gggg";
 
 a.ID = 25;
 
 mylist.push_back (a);
 
 
 
 mylist.sort();
// 现在默认的operator已经被我们重载了,就不用管,直接调用sort就好了
 
 for (iter = mylist.begin(); iter != mylist.end();++iter)
  
 {
  
    std::cout <<static_cast<S>(*iter).ID << "\t";
  
 }
 
 std::cout <<std::endl;     
 
 return 0;
 
}
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值