为了说明C++定义比较函数的几种方法,下面将以sort函数为例进行说明。
1.默认的内置比较函数,将按照对象内定义的<运算符由小到大排序
#include2.使用自定义的比较函数cmp,将按照从大到小的顺序排序#include #include #include #include using namespace std;int main(){ vector vec{"Hello", "World!", "Zhang San", "Li Si", "C++", "C"}; sort(vec.begin(), vec.end()); copy(vec.begin(), vec.end(), ostream_iterator (cout, "\n")); return 0;}
bool cmp(const string & a, const string & b){ return a > b;}int main(){ vector3.使用C++内置的Function objectvec{"Hello", "World!", "Zhang San", "Li Si", "C++", "C"}; sort(vec.begin(), vec.end(), cmp); copy(vec.begin(), vec.end(), ostream_iterator (cout, "\n")); return 0;}
int main(){ vector4.使用C++11新支持的lambda表达式vec{"Hello", "World!", "Zhang San", "Li Si", "C++", "C"}; sort(vec.begin(), vec.end(), greater ()); copy(vec.begin(), vec.end(), ostream_iterator (cout, "\n")); return 0;}
int main(){ vectorvec{"Hello", "World!", "Zhang San", "Li Si", "C++", "C"}; sort(vec.begin(), vec.end(), [](const string & a, const string & b) {return a > b;}); copy(vec.begin(), vec.end(), ostream_iterator (cout, "\n")); return 0;}
5.重载()运算符,即自定义一个Function object
class cmp{public: bool operator () (const string & a, const string & b) { return a > b; }};int main(){ vectorvec{"Hello", "World!", "Zhang San", "Li Si", "C++", "C"}; sort(vec.begin(), vec.end(), cmp()); copy(vec.begin(), vec.end(), ostream_iterator (cout, "\n")); return 0;}