effective stl 第21条:总是让比较函数在等值情况下返回false
2016-09-22 20:12
295 查看
#include<iostream> #include<set> #include<map> #include<algorithm> #include<functional> #include<iterator> using namespace std; int main() { set<int, less_equal<int>> s;//s采用“<=”来排序 s.insert(10); //s.insert(10);//插入两个10后将引起不明确的行为 /* 因为less_equal采用的是<=,因此集合会检查下边的表达式是否为真: !(10a<= 10b)&&!(10b<=10a) 结果为false&&false 为false 也就是说,10a和10b是不等价的,从而不相同,因此10b会插入到10a的旁边 ,会导致不明确的行为,但是更普遍的后果是,会导致集合中有10的两份拷贝,这意味着他不是 一个集合!即破坏了set容器 */ //ostream_iterator的头文件是iterator copy(s.begin(), s.end(), ostream_iterator<int>(cout, "\n")); return 0; }
总结的3点:
1、保证对关联容器所使用的比较函数总是要对相等返回false.
2、比较函数的返回值表明的是按照该函数定义的排列顺序,一个值是否在另一个值之前。相等的值从来不会有前后顺序关系,所以,对相等的值,比较函数应当始终返回false.
3、除非你的比较函数对相等的值总是返回false,否则你会破坏所有的标准关联容器,不管他们是否允许存储重复的值。
4、任何定义了“严格的弱序化”的函数必须对相同的的两个拷贝返回false
相关文章推荐
- 火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false
- 火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false
- php 在linux 用fopen() 函数打开,file_get_contents(),fread()函数 读取 另外一台服务器映射过来的文件 总是返回false,null的情况。
- php 在linux 用file_exists() 函数判断 另外一台服务器映射过来的文件是否存在 总是返回false
- Effective STL: Item 21:永远让比较函数对相同元素返回false
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- 永远让比较函数对相等的值返回false
- 永远让比较函数对相等的值返回false
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- java equals 比较两个字符串,总是返回false
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false)
- FtpClient.storeFile()函数总是返回false
- 关联容器:永远让比较函数对相等的值返回false
- Effective STL - 为指针的关联容器指定比较函数
- Effective STL 条款21: 关联容器的strict weak order(让比较函数对相等的值返回false) .
- 函数strstr代码举例——从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL),没有就返回NULL。
- file_exists函数总是返回false
- 返回比较表达式比较结果/计算表达式值的函数
- Wince下eVC开发WinSock程序,connect函数总是立即返回0的问题。