关系操作符
所有的容器类型都支持用关系操作符来实现两个容器的比较。想比较的容器必须具有相同的容器类型,而且其元素类型也必须相同。例如,vector<int> 容器只能与 vector<int> 容器比较,而不能与 list<int> 或vector< double > 容器比较。
容器的比较是基于容器内元素的比较。容器的比较使用了元素类型定义的同一个关系操作符:两个容器做 != 比较使用了其元素类型定义的 != 操作符。如果容器的元素类型不支持某种操作符,则该容器就不能做这种比较运算。
下面的操作类似于 string 类型的关系运算:
如果两个容器具有相同的长度而且所有元素都相等, 那么这两个容器就相等;否则,它们就不相等。
如果两个容器的长度不相同, 但较短的容器中所有元素都等于较长容器中对应的元素,则称较短的容器小于另一个容器。
如果两个容器都不是对方的初始子序列, 则它们的比较结果取决于所比较的第一个不相等的元素。
/*
ivec1: 1 3 5 7 9 12
ivec2: 0 2 4 6 8 10 12
ivec3: 1 3 9
ivec4: 1 3 5 7
ivec5: 1 3 5 7 9 12
*/
// ivec1 and ivec2 differ at element[0]: ivec1 greater than ivec2
ivec1 < ivec2 // false
ivec2 < ivec1 // true
// ivec1 and ivec3 differ at element[2]: ivec1 less than ivec3
ivec1 < ivec3 // true
// all elements equal, but ivec4 has fewer elements, so ivec1 is
greater than ivec4
ivec1 < ivec4 // false
ivec1 == ivec5 // true; each element equal and same number of elements
ivec1 == ivec4 // false; ivec4 has fewer elements than ivec1
ivec1 != ivec4 // true; ivec4 has fewer elements than ivec1
使用元素提供的关系操作符实现容器的关系运算
C++ 语言只允许两个容器做其元素类型定义的关系运算。
所有容器都通过比较其元素对来实现关系运算:
ivec1 < ivec2
假设 ivec1 和 ivec2 都是 vector<int> 类型的容器,则上述比较使用了内置 int 型定义的小于操作符。如果这两个 vector 容器存储的是 strings 对象,则使用 string 类型的小于操作符。
如果上述 vector 容器存储的对象不具有关系运算,则以上比较是错误的。