您的位置:首页 > 编程语言 > C语言/C++

C++语言中的一些编程技巧

2010-08-18 19:28 155 查看
1、如何对复合类型数据构造STL模版的比较函数。

对于通用的STL算法,比如一些排序算法或比较算法,都能够自己定义比较函数。

比如下面的形式:

bool compare(Suitor a,Suitor b){ //binary predicate,注意比较函数中的参数一定要是Suitor类型的,不能是Suitor*类型

if( a.height < b.height ) return true;
if( a.height > b.height ) return false;

if( a.weight < b.weight ) return true;
if( a.weight > b.weight ) return false;

if( a.last!= b.last )
return (a.last < b.last)? true: false;
if( a.first!=b.first)
return (a.first < b.first)? true: false;
}

stable_sort(suitors,suitors+suitor_count-1,compare);

这是binary predicate,所以必须有两个参数,参数的类型与对应的操作对象类型要一致。

对于C++中的容器类,有的也是允许定义自己的比较函数的,一般都是对元素有排序功能的容器。比如:set、map、multiset、multimap、priority_queue,但是需要注意的是,这里的 比较函数一般都是需要重载operator()函数的类(其实就是类或结构)。

比如下面的形式:

class Compare{ //重载operator()的比较类

public:

bool operator()(const person& a,const person& b){

if( a.appearance < b.appearance) return true;
if( a.appearance > b.appearance) return false;

return ( a.num > b.num )? true : false ;
}

};

priority_queue<Person,vector<Person>,Compare> PersonHeap;

但是需要注意的是operator()函数必须是public权限的,因为对应的容器需要调用它。如果写在struct中,就无所谓权限了,因为struct中的元素都是public的。

另外在声明对应的容器时要注意相应的比较函数的参数位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: