码迷,mamicode.com
首页 > 其他好文 > 详细

STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法

时间:2020-05-25 00:28:38      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:http   tis   com   图片   multiset   set   strong   排列   multi   

Set/multiset 中元素的存储数据总是会按照从大到小或者从小到大排列,这个是怎么实现的?这就要说 “仿函数” 这个概念了。

 

仿函数概念

1. 尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。

2. functor,翻译成函数对象,伪函数,它是是重载了“()”操作符的普通类对象。从语法上讲,它与普通函数行为类似。

3. functional 头文件中包含的 greater<> 与 less<> 就是函数对象。

下面举出 greater<int> 和 less<int> 的简易实现原理,set/setmulti 容器就是调用函数对象的 operator() 方法去比较两个值的大小。

 1 struct greater
 2 {
 3   bool operator()(const int& iLeft, const int& iRight)
 4   {
 5        return (iLeft>iRight);   
 6   }
 7 }
 8 
 9 struct less
10 {
11   bool operator()(const int& iLeft, const int& iRight)
12   {
13        return (iLeft<iRight);    
14   }
15 }

 

在 Set/multiset 的源码中默认有 greater<> 与 less<>  的调用,如下:

技术图片

上图这是一个类模板,其53行就是这个模板的参数列表,less其实是一个结构体,但他 operator 了括号,我们可以把当做函数去使用,它包含在头文件 <functional> 中,他是一个比较函数,其原型:

技术图片

 

第126行便是其重载,如果左值小于右值便返回 True 否则返回 False。

第131行-140行便是 greater<> 的原型

 

 

 

 

 

 

 

 

 

==============================================================================================================================

STL——容器(Set & multiset)之 仿函数(函数对象)functor 的用法

标签:http   tis   com   图片   multiset   set   strong   排列   multi   

原文地址:https://www.cnblogs.com/CooCoChoco/p/12953439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!