operator==,!=,<,<=,>,>=,<=>(std::vector)

来自cppreference.com
< cpp‎ | container‎ | vector
定义于头文件 <vector>
(1)
template< class T, class Alloc >

bool operator==( const std::vector<T,Alloc>& lhs,

                 const std::vector<T,Alloc>& rhs );
(C++20 前)
template< class T, class Alloc >

constexpr bool operator==( const std::vector<T,Alloc>& lhs,

                           const std::vector<T,Alloc>& rhs );
(C++20 起)
template< class T, class Alloc >

bool operator!=( const std::vector<T,Alloc>& lhs,

                 const std::vector<T,Alloc>& rhs );
(2) (C++20 前)
template< class T, class Alloc >

bool operator<( const std::vector<T,Alloc>& lhs,

                const std::vector<T,Alloc>& rhs );
(3) (C++20 前)
template< class T, class Alloc >

bool operator<=( const std::vector<T,Alloc>& lhs,

                 const std::vector<T,Alloc>& rhs );
(4) (C++20 前)
template< class T, class Alloc >

bool operator>( const std::vector<T,Alloc>& lhs,

                const std::vector<T,Alloc>& rhs );
(5) (C++20 前)
template< class T, class Alloc >

bool operator>=( const std::vector<T,Alloc>& lhs,

                 const std::vector<T,Alloc>& rhs );
(6) (C++20 前)
template< class T, class Alloc >

constexpr /* see below */ operator<=>( const std::vector<T,Alloc>& lhs,

                                       const std::vector<T,Alloc>& rhs );
(7) (C++20 起)

比较二个 vector 的内容。

1-2) 检查 lhsrhs 的内容是否相等,即它们是否拥有相同数量的元素且 lhs 中每个元素与 rhs 的同位置元素比较相等。
3-6) 按字典序比较 lhsrhs 的内容。由等价于 std::lexicographical_compare 的函数进行比较。
7) 按字典序比较 lhsrhs 的内容。如同通过在二个 vector 上以进行合成三路比较(见后述)的函数对象调用 std::lexicographical_compare_three_way 进行比较。返回类型同合成三路比较的结果类型。

给定分别作为左操作数与右操作数的两个 const E 左值 lhsrhs (其中 ET ),合成三路比较定义如下:

  • std::three_way_comparable_with<E, E> 得到满足则等价于 lhs <=> rhs
  • 否则,若以 operator< 比较二个 const E 左值为良构且结果类型满足 boolean-testable ,则等价于
lhs < rhs ? std::weak_ordering::less :
rhs < lhs ? std::weak_ordering::greater :
            std::weak_ordering::equivalent
  • 否则,不定义合成三路比较,而 operator<=> 不参与重载决议。
three_way_comparable_withboolean-testable 被满足但未被实现,或使用 operator<E< 不建立全序,则 operator<=> 的行为未定义。

[编辑] 参数

lhs, rhs - 要比较内容的 vector
-
为使用重载 (1-2) , T 必须满足可相等比较 (EqualityComparable) 的要求。
-
为使用重载 (3-6) , T 必须满足可小于比较 (LessThanComparable) 的要求。顺序关系必须建立全序。

[编辑] 返回值

1)vector 内容相等则为 true ,否则为 false
2)vector 内容不相等则为 true ,否则为 false
3)lhs 的内容按字典序小于 rhs 的内容则为 true ,否则为 false
4)lhs 的内容按字典序小于等于 rhs 的内容则为 true ,否则为 false
5)lhs 的内容按字典序大于 rhs 的内容则为 true ,否则为 false
6)lhs 的内容按字典序大于等于 rhs 的内容则为 true ,否则为 false
7)lhs 的内容按字典序小于 rhs 的内容则为 std::strong_ordering::less
lhs 的内容按字典序大于 rhs 的内容则为 std::strong_ordering::greater
lhsrhs 中的首对不等价元素无序则为 std::partial_ordering::unordered
否则为 std::strong::equal

[编辑] 复杂度

1-2)lhsrhs 的大小不同则为常数,否则与 vector 大小成线性
3-7)vector 大小成线性