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>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有所收获,那么赶紧扔了 ...
随机推荐
- [LeetCode&Python] Problem 171. Excel Sheet Column Number
Given a column title as appear in an Excel sheet, return its corresponding column number. For exampl ...
- Unity 灯光探针用法教程
Unity 灯光探针用详解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- hello1.java内容简单介绍
双击该Hello.java文件以查看它. 在Hello类,称为管理bean类,提供了getter和setter方法name中的Facelets页面表达式中使用属性.默认情况下,表达式语言引用类名,第一 ...
- doc四则运算
import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.ut ...
- C++学习(十)(C语言部分)之 分支语句
#include<stdio.h> // std 标准 io ----> input output 输入 输出 printf scanf getchar ...... #i ...
- ISCC的 Misc——WP
比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下 Misc 第一题:What is that? 下载链接; 打开 解压 是一个图片 因为分值很少所以题和简单 观察图片是一个向下指的手 说明fl ...
- 求两个数之间的质数 -----------基于for循环 算法思想
前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...
- 【BZOJ4521】【CQOI2016】手机号码
感觉数位dp好恶心…… 原题: 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的 ...
- LG4213 【【模板】杜教筛(Sum)】
sum\(\mu\)求法 设 \[S(n)=\sum_{i=1}^n \mu(i)\] 回顾公式 \[\sum_{d|n}\mu(d)=[n=1]\] 对\(n\)求和 \[\sum_{i=1}^n\ ...
- day 60 Bootstrip学习
图标地址 http://fontawesome.io/icons/ 图标用法地址 http://fontawesome.io/examples/ 实现代码 <!DOCTYPE html> ...