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的。
另外在声明对应的容器时要注意相应的比较函数的参数位置。
对于通用的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的。
另外在声明对应的容器时要注意相应的比较函数的参数位置。
相关文章推荐
- 一些小的编程技巧
- 服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
- 服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
- android JNI编程 一些技巧(整理)
- 介绍Python中的一些高级编程技巧
- .net编程中的一些技巧(二)
- 关于ThinkPHP的一些编程技巧
- 总结两个Javascript的哈稀对象的一些编程技巧
- 编程变量命名的一些技巧
- 提高IOCP 效率的一些方法,技巧 (来自WINDOWS 网络编程第二版)
- 提高IOCP 效率的一些方法,技巧 (来自WINDOWS 网络编程第二版)
- python 的一些高级编程技巧
- php编程中一些技巧函数的应用
- 【转】php编程中一些技巧函数的应用
- Eclipse编程一些快捷键技巧
- 一些高效嵌入式ARM开发的编程技巧
- iPhone编程的一些技巧总结
- 收集整理了一些开发技巧专题,并汇集成一个编程学习网站
- 关于代码阅读的编程实现技巧及自己工作学习的一些经验(推荐看后面的后记)
- 总结两个Javascript的哈稀对象的一些编程技巧