STL进阶--相等 vs 等价 (Equality vs Equivalence)
相等性 vs 等价性
问题: 以下两个find的结果分别指向什么?
class Lsb_less {
public:
bool operator()(int x, int y) {
return (x%10)<(y%10);
}
};
set<int, Lsb_less> s = {21, 23, 26, 27}; //自定义比较方法
set<int, Lsb_less>::iterator itr1, itr2;
itr1 = find(s.begin(), s.end(), 36); // 指向s.end()
itr2 = s.find(36); // 指向26
为什么不一样?
set<int, Lsb_less> s = {21, 23, 26, 27};
/*
* 算法find()寻找相等性: if (x == y)
*/
itr1 = find(s.begin(), s.end(), 36); // itr1指向s.end()
/*
* set<int>::find()寻找等效性: if ( !(x<y) && !(y<x) )
*/
itr2 = s.find(36); // itr2 points to 26
总结
如果函数使用<运算符或类似函数,它检查等效性。通常它是用于已排序数据的算法,或者已排序数据容器的成员函数,如关联容器。
如果函数使用 == 运算符或类似函数,它检查相等性。通常不要求数据已排序。
相等性的算法:
search
find_end
find_first_of
adjacent_search等效性的算法:
binary_search // simple forms
includes
lower_bound
upper_bound当使用某个函数搜索或者删除元素时,确保你理解了相等性和等效性之间的区别。
STL进阶--相等 vs 等价 (Equality vs Equivalence)的更多相关文章
- STL进阶--vector vs deque
vector class Dog; // 例 1: vector<Dog> vec(6); // vec.capacity() == 6, vec.size() == 6, // 默认构造 ...
- STL进阶--删除元素
删除元素 从vector或deque删除元素 vector<int> vec = {1, 4, 1, 1, 1, 12, 18, 16}; // 删除所有的1 for (vector< ...
- STL进阶--狡猾的反向迭代器
反向迭代器 两种声明反向迭代器的方法 reverse_iterator<vector<int>::iterator> ritr; vector<int>::reve ...
- STL进阶--成员函数 vs 算法
容器的成员函数 vs 算法 容器中同名的函数 List: void remove(const T); template<class Comp> void remove_if(Comp); ...
- [GeekBand] STL与泛型编程(2)
本篇文章在上一篇文章的基础上进一步介绍一些常用的容器以及STL的一些深入知识. 一. Stack和Queue 栈和队列是非常常用的两种数据结构,由deque适配而来.关于数据结构的知识这里就不在介绍了 ...
- C++学习书籍推荐《Effective STL(英文)》下载
百度云及其他网盘下载地址:点我 作者简介 Scott Meyers is one of the world's foremost authorities on C++, providing train ...
- 【转】三十分钟掌握STL
转自http://net.pku.edu.cn/~yhf/UsingSTL.htm 三十分钟掌握STL 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以 ...
- C++STL之迭代器
迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值.例如, ...
- 三十分钟掌握STL
这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有所收获,那么赶紧扔了 ...
随机推荐
- RNN 通过字符语言模型 理解BPTT
链接:https://github.com/karpathy/char-rnn http://karpathy.github.io/2015/05/21/rnn-effectiveness/ http ...
- Javascript中的Bind,Call和Apply
http://www.html-js.com/article/JavaScript-functional-programming-in-Javascript-Bind-Call-and-Apply?s ...
- 为何linux(包括mac系统)执行指令要加上 ./ ??
比如,现在要在$HIVE_HOME/bin下执行hive指令来启动hive,则该指令的执行顺序如下所示: 1 先找PATH路径 1.1 如果PATH路径下配置了$HIVE_HOME/bin,无论PAT ...
- python scrapy 爬虫实例
1 创建一个项目 scrapy startproject basicbudejie 2 编写爬虫 import scrapy class Basicbudejie(scrapy.Spider): na ...
- hdu4289 Control 最大流最小割
You, the head of Department of Security, recently received a top-secret information that a group of ...
- 自定义ThreadPoolExecutor带Queue缓冲队列的线程池 + JMeter模拟并发下单请求
.原文:https://blog.csdn.net/u011677147/article/details/80271174 拓展: https://github.com/jwpttcg66/GameT ...
- 紧接着上篇文章,实现类一个是标准的FIFO,一个是出队在头部入队不一定追加到末尾
注意描述:一个是插入队列(1是可以插入尾部eg一遍的序列尾部追加,2是可以插入中间eg优先队列) 而移除的描素都是删除头部 import java.util.Comparator; import ja ...
- curl提示不支持https协议解决方法
根据网上的资料,这个问题的原因是因为在安装curl时使用默认安装,但是默认安装并不支持https协议 简单粗暴的办法就是,卸载重新安装curl(有一种方法是重新编译就可以了,然后使用编译后的可执行文件 ...
- 13机器学习实战之PCA(1)
降维技术 对数据进行降维有如下一系列的原因: 使得数据集更容易使用 降低很多算法的计算开销 去除噪音 使得结果易懂 在以下3种降维技术中, PCA的应用目前最为广泛,因此本章主要关注PCA. 主成分分 ...
- easyUI的datagrid每行数据添加操作按钮的方法
今天做项目的时候,想在easyui的datagrid每一列数据后边都加上一个操作按钮,一开始想在后台拼接字符串用JSON传回,但是我测试之后发现这个方法不管用,在网上搜索了一下,整理如下: 其实要加一 ...