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

时间:2022-06-08 20:23:40

转载自:http://hi.baidu.com/yatusiter/blog/item/834b8694b6370c19d31b7014.html
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;

}