重载小于号后用sort函数提示类型错误C/C++ code#include iostream#include vector#includealgorithm
重载小于号后用sort函数提示类型错误
C/C++ code#include <iostream>#include <vector>#include<algorithm>#include<iterator>#include<utility>#include<limits>using namespace std;using namespace std::rel_ops;class pro;typedef vector<pro>::iterator proit;vector<pro> a;int max_times(numeric_limits<int>::min());void next(proit begin,int cont=0);class pro{public: int begin; int end; bool operator==(const pro& b)const { if(this->begin == b.begin) { return this->end == b.end; } return false; } bool operator<(const pro& b) const { if(begin == b.begin) { return end < b.end; } return begin < b.begin; } friend istream& operator>>(istream& i,pro& a);};istream& operator>>(istream& i,pro& a){ i>>a.begin>>a.end; return i;}class able{public: able(pro& com) { this->pre = com; } bool operator()(pro& next) { return next.begin >= this->pre.end; }private: pro pre;};void next(proit begin,int cont){ if(begin == a.end() ) { if(cont<=max_times) { return; } max_times = cont; return; } proit pos(begin); while( pos != a.end() ) { pos = find_if(pos,a.end(),able(*pos)); next(pos,cont+1); }}int main(){ int i; proit pos; pro temp; while(cin>>i,i) { max_times = numeric_limits<int>::min(); a.clear(); while(i--) { cin>>temp; a.push_back(temp); } sort(a.begin(),a.end()); for(pos=a.begin();pos!=a.end();pos++) { next(pos,1); } cout<<max_times<<endl; } return 0;}
编译错误
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h: In function `const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = pro]':
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:2484: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<pro*, std::vector<pro, std::allocator<pro> > >, _Size = int]'
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:2555: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<pro*, std::vector<pro, std::allocator<pro> > >]'
..\src\2037(complete).cpp:96: instantiated from here
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:90: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:91: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:93: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:97: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_algo.h:99: error: passing `const pro' as `this' argument of `bool pro::operator<(const pro&)' discards qualifiers
怎么回事,我用的mingw,用vs编译就没问题。
------解决方案--------------------
你得看看stl::algorithm中sort的用法:
http://www.cplusplus.com/reference/algorithm/sort/
针对楼主这个例子,建议将比较函数作为类pro的友元函数。
[解决办法]编译器有毛病, GCC同样无障碍.