operator==,!=,<,<=,>,>=,<=>(std::pair)
来自cppreference.com
在标头 <utility> 定义
|
||
(1) | ||
(C++14 前) | ||
(C++14 起) | ||
(2) | ||
(C++14 前) | ||
(C++14 起) (C++20 前) |
||
(3) | ||
(C++14 前) | ||
(C++14 起) (C++20 前) |
||
(4) | ||
(C++14 前) | ||
(C++14 起) (C++20 前) |
||
(5) | ||
(C++14 前) | ||
(C++14 起) (C++20 前) |
||
(6) | ||
(C++14 前) | ||
(C++14 起) (C++20 前) |
||
(7) | (C++20 起) | |
1-2) 测试 lhs 和 rhs 的两个元素是否都各自相等,即分别比较 lhs.first 和 rhs.first,以及 lhs.second 和 rhs.second。
3-6) 用
operator<
按字典序比较 lhs 和 rhs,即比较首元素,然后只有在它们等价时再比较第二元素。7) 用 synth-three-way 按字典序比较 lhs 和 rhs,即比较首元素,然后只有在它们等价时再比较第二元素。synth-three-way-result 是
synth-three-way
的返回类型。
|
(C++20 起) |
参数
lhs, rhs | - | 要比较的 pair
|
返回值
1) 在 lhs.first == rhs.first 且 lhs.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 中的值 (函数模板) |