STL中的 “大”、“小”和 “相等”

1、关联容器内部的元素是从小到大排序的

注意:这里的从小到大中的大小可以是自定义的,比如设置为绝对值大的为大。没有自定义的情况下,按照缺省情况执行。

2、有些算法要求其操作的区间是从小到大排序的,称为“有序区间算法”

例:

  • binary_search
3、有些算法会对区间进行从小到大排序,称为“排序算法”

例:

  • sort
4、还有一些其他算法会用到“大”,“小”的概念
5、使用STL时,在缺省的情况下,以下三个说法等价:
  • x比y小
  • 表达式“x<y”为真
  • y比x大
6有时,“x和y相等”等价于“x==y为真”

例:

  • 在未排序的区间上进行的算法,如顺序查找find
7、有时“x和y相等”等价于“x小于y和y小于x同时为假”

例:

  • 有序区间算法,如binary_search
  • 关联容器自身的成员函数find

注意:关联容器自身有查找算法,不应该再使用其他的查找方法。

#include <iostream>
#include <algorithm>
using namespace std;
class A {
	int v;
public:
	A(int n):v(n) { }
	bool operator < ( const A & a2) const
	{
		//必须为常量成员函数
		cout << v << "<" << a2.v << "?" << endl;
		return false;
	}
	bool operator ==(const A & a2) const
	{
		cout << v << "==" << a2.v << "?" << endl;
		return v == a2.v;
	}
};

int main()
{
	A a [] ={ A(1),A(2),A(3),A(4),A(5) };
	cout << binary_search(a,a+4,A(9));  //x<y 和y<x同时不成立,则x和y相等,这就是binary_search的工作原理
	//折半查找
	return 0;
}
/*
输出结果:
3<9?
2<9?
1<9?
9<1?
1
*/
原文地址:https://www.cnblogs.com/lasnitch/p/12764218.html