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

时间:2022-02-09 21:05:16


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;
 
}