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

来自cppreference.com
< cpp‎ | utility‎ | pair
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
std::pair
成员函数
(C++11)
非成员函数
operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
(C++11)
(C++11)
推导指引(C++17)
辅助类
(C++11)
 
在标头 <utility> 定义
(1)
template< class T1, class T2, class U1, class U2 >
bool operator==( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator==( const std::pair<T1, T2>& lhs,

                           const std::pair<U1, U2>& rhs );
(C++14 起)
(2)
template< class T1, class T2, class U1, class U2 >
bool operator!=( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator!=( const std::pair<T1, T2>& lhs,

                           const std::pair<U1, U2>& rhs );
(C++14 起)
(C++20 前)
(3)
template< class T1, class T2, class U1, class U2 >
bool operator<( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator<( const std::pair<T1, T2>& lhs,

                          const std::pair<U1, U2>& rhs );
(C++14 起)
(C++20 前)
(4)
template< class T1, class T2, class U1, class U2 >
bool operator<=( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator<=( const std::pair<T1, T2>& lhs,

                           const std::pair<U1, U2>& rhs );
(C++14 起)
(C++20 前)
(5)
template< class T1, class T2, class U1, class U2 >
bool operator>( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator>( const std::pair<T1, T2>& lhs,

                          const std::pair<U1, U2>& rhs );
(C++14 起)
(C++20 前)
(6)
template< class T1, class T2, class U1, class U2 >
bool operator>=( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(C++14 前)
template< class T1, class T2, class U1, class U2 >

constexpr bool operator>=( const std::pair<T1, T2>& lhs,

                           const std::pair<U1, U2>& rhs );
(C++14 起)
(C++20 前)
template< class T1, class T2, class U1, class U2 >

constexpr std::common_comparison_category_t<synth-three-way-result<T1, U1>,
                                            synth-three-way-result<T2, U2>>

    operator<=>( const std::pair<T1, T2>& lhs, const std::pair<U1, U2>& rhs );
(7) (C++20 起)
1-2) 测试 lhsrhs 的两个元素是否都各自相等,即分别比较 lhs.firstrhs.first,以及 lhs.secondrhs.second
3-6)operator< 按字典序比较 lhsrhs,即比较首元素,然后只有在它们等价时再比较第二元素。
7)synth-three-way 按字典序比较 lhsrhs,即比较首元素,然后只有在它们等价时再比较第二元素。synth-three-way-resultsynth-three-way 的返回类型。

<<=>>=!= 运算符分别从 operator<=>operator== 合成

(C++20 起)

参数

lhs, rhs - 要比较的 pair

返回值

1)lhs.first == rhs.firstlhs.second == rhs.second 时返回 true,否则返回 false
2) !(lhs == rhs)
3)lhs.first < rhs.first 时返回 true。否则在 rhs.first < lhs.first 时返回 false。否则在 lhs.second < rhs.second 时返回 true。否则返回 false
4) !(rhs < lhs)
5) rhs < lhs
6) !(lhs < rhs)
7)synth-three-way(lhs.first, rhs.first) 不等于 0 时返回它,否则返回 synth-three-way(lhs.second, rhs.second)

示例

因为 pair 定义了 operator<,所以存储 pair 的容器能排序。

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
 
int main()
{
    std::vector<std::pair<int, std::string>> v = {{2, "baz"},
                                                  {2, "bar"},
                                                  {1, "foo"}};
    std::sort(v.begin(), v.end());
 
    for (auto p: v)
        std::cout << "{" << p.first << ", " << std::quoted(p.second) << "}\n";
}

输出:

{1, "foo"}
{2, "bar"}
{2, "baz"}

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 296 C++98 缺失了除了 ==< 以外的运算符的描述 已补充
LWG 3865 C++98 比较运算符仅接受同类型的 pair 接受不同类型的 pair

参阅

(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20)
按字典顺序比较 tuple 中的值
(函数模板)