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