Using a Comparison Function for the Key Type
(这是C++系列随笔的第二篇,这一系列是我练习C++而查的资料)
extracted from C++ Primer 5th. edition pp. 425
Using a Comparison for the Key Type
The type of the operation that a container uses to organize its elements is part of the type of that container. To specify our own operation, we must supply the type of that operation when we define the type of an associative container (including prioroty_queue). The operation type is specified following the element type inside the angle brackets that we use to say which type of container we are defining. (We are actually required to define a parameter type not to pass an argument.)
Each type inside the angle brackets is just that, a type (please pay attention to this sentence). We supply a particular comparison operation (more generally, a callable object: a pointer to function or a function object) of the specified type (that must have the same type as specified inside the angle brackets, and conversely we msut specify the type inside the angle brackets the same type as the constructor argument we are going to and allowed to supply (from outside? sounds subtle...)) when we create a container.
(C++ Primer, 5th. Ed. pp. 249)
Related Topic:
Function Pointer Parameters
Just as with arrays, we cannot define parameters of function type but can have a parameter that is a pointer to function. As with arrays, we can write a parameter that looks like a function type (when declaring or defining a function), but it will be treated as a pointer:
//third parameter is a function type and is automatically treated as a pointer to function void useBIgger(const string &s1, const string &s2, bool pf(const string &, const string &)); //equivalent declaration: explicitly define the parameter as a pointer to function void useBIgger(const string &s1, const string &s2, bool (*pf)(const string &, const string &));
However we cannot do so when defining the type of an associative container (a parameter that looks like a functoin type will not be treated as a pointer, and thus illegal):
//error priority_queue<P, vector<P>, bool (const P&, const P&)> que(cmp); //OK priority_queue<P, vector<P>, bool (*) (const P&, const P&)> que(cmp); //a simplified declaration using decltype priority_queue<P, vector<P>, decltype(cmp)*> que(cmp);
- POJ 1719 Shooting Contest 二分匹配
- C++ STL之stack queue 作者csdn账号 liuhmmjj
- java反射机制
- Nginx配置文件nginx.conf中文详解(总结)
- Hadoop家族
- mac jdk 6设置
- const常量和#define宏常量的区别
- 关于规划的寓言故事:把一张纸折叠51次 ------意义不在折纸,而在规划,重在规划!!!
- MAC 如何在MAC系统中保存txt格式文本
- 进程监控程序的开发(程序运行监控)
- HDU_3667_Transportation(最小费用流)
- JavaScript----数字转换字符串&字符串转发数字
- (奶油小刀插件) android-butterknife-zelezny 插件使用
- Android 网络编程
- CentOS 6 使用 yum 安装MongoDB及服务器端配置
- spfa算法
- 自定义的一个分页类
- 【UIKit-124-3】#import <UIKit/UIView.h>
- Acdream 1667 调皮的数一 (ACdreamer java 专场)
- HDU1231最大连续子序列(动态规划)