effective stl 第19条:理解相等(equality)和等价(equivalence)的区别
来源:互联网 发布:gh0st 源码下载 编辑:程序博客网 时间:2024/05/24 06:58
#include<iostream>#include<map>#include<set>using namespace std;bool ciStringCompare(const string l, const string r){ //该函数是对字符串不分大小写的进行比较 return true;}int main(){ /* 关联容器会自动排序,它们按照等价而不是相等的标准来对待自己的内容; set和map不允许有重复的项目; map和multimap通常忽略它所包含的每个对象中的一半; STL中没有基于散列表的容器,但是尽管STL中没有散列表,但是不用自己实现,已经有高质量的实现了 */ //find算法和set的insert成员函数是两个有代表性的函数,在STL中有很多这样的函数, //他们需要确定两个值是否相同,find对相同的定义是相等,是以operator==为基础的 //set::insert对相同的定义是等价,是以operator<为基础的 //相等的概念是基于operator==的,如果表达式x==y返回为真,则x与y相等,否则就不等了 //但是x与y有相等的值不一定意味着x和y的所有数据成员都有相同的值。 /* 等价关系是以"在已排序的区间对象值的相对顺序"为基础的。对于两个对象x,y 如果按照关联容器c的排列顺序, 每个都不在另一个的前面,那么称这两个对象按照c的排列顺序有等价的值 */ /* 在一般的情况下,一个关联容器的比较函数并不是operator<,甚至不是less,他是用户自定义的判别式 每个关联容器都是通过key_map成员函数使判别式可在外部被使用,因此如果下边的表达式为true,两个对象 x和y是等价的 */ set<string> c; if (!c.key_comp()("X","x" ) && !c.key_comp()("x", "X")) return true; /* 假设不区分大小写的set<string> ,即STL与stl看作是等价的。 */ struct CIStringCompare : public binary_function<string, string, bool>{//该基类的信息参加第40条 bool operator()(const string& lhs, const string& rhs) const{ return ciStringCompare(lhs, rhs); } }; set<string, CIStringCompare> ciss; ciss.insert("Persephone");//插入大写的的字符串 ciss.insert("persephone");//插入小写的字符串 //只有第一个会被插入,因为Persephone和persephone等价 //如果使用set的成员函数find来查找字符串"persephone",则会查找成功 if (ciss.find("persephone") != ciss.end()); //但是如果使用非成员函数的find算法,则查找将会失败 if (find(ciss.begin(), ciss.end(), "persephone") != ciss.end()); //这是因为Persephone和persephone等价,但是并不相等,因为string("persephone")!=string("Persephone") //对于非标准的基于散列表的关联容器,有两种常见的设计,一种是基于相等的,一种是基于等价的。 return 0;}
0 0
- effective stl 第19条:理解相等(equality)和等价(equivalence)的区别
- STL中容器相等(equality)和等价(equivalence)的区别
- STL中相等(equality)与等价(equivalence)的区别
- STL中相等(equality)与等价(equivalence)的区别
- STL 理解相等和等价的区别
- effective STL - 了解相等和等价的区别
- Effective STL第十九节 相等和等价的区别
- Effective STL 19 understand the difference between equality and equivalence
- stl中相等和等价的区别
- stl中相等和等价的区别
- 了解STL中相等和等价的区别
- effective stl 第36条:理解copy_if的正确实现
- Custom comparison, equality and equivalence with the STL
- 黑盒测试之等价划分法(Equivalence partitioning )
- effective stl 第48条:总是包含(#include)正确的头文件
- effective stl 第11条 :理解自定义分配子的合理用法
- effective stl 第41条:理解ptr_fun/mem_fun/mem_fun_ref的由来
- Effective stl 第6条
- C++对象数组调用构造/析构函数的方法
- TextView 字体过长解决方案(实现手动滚动字体)
- 基础知识很重要
- Spring框架(一)
- Android NDK学习笔记10-JNI域和方法描述
- effective stl 第19条:理解相等(equality)和等价(equivalence)的区别
- 《机器学习实战》实现时遇到的问题
- android中的AIDL进程间通信
- Selenium学习12--数据驱动csv
- POJ 2337 Catenyms 输出最小字母序欧拉路径 邻接表存储
- Spring MVC一些知识
- CSDN技术主题月----“深度学习”代码笔记专栏
- 剑指offer面试题29:数组中出现次数超过一半的数字
- 坚持就是胜利- -。。。。