C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç¨åºæ¯æå·¥å ·
- std::initializer_list
- 彿°å¯¹è±¡
- std::hash
- std::pair
- std::pair<T1,T2>::pair
- std::pair<T1,T2>::swap
- std::make_pair
- operator==,!=,<,<=,>,>=,<=>(std::pair)
- std::swap(std::pair)
- std::get(std::pair)
- std::pair<T1,T2>::operator=
- std::pair çæ¨å¯¼æå¼
- std::tuple_size<std::pair>
- std::tuple_element<std::pair>
- std::apply
- åºç¹æ§æµè¯å® (C++20)
- std::tuple
- std::optional
- std::any
- std::variant
- æ ¼å¼ååº (C++20)
- std::integer_sequence
- std::exchange
- std::make_from_tuple
- std::launder
- std::to_chars
- std::from_chars
- std::as_const
- std::source_location
- å忰彿°
- std::bitset
- std::cmp_equal, cmp_not_equal, cmp_less, cmp_greater, cmp_less_equal, cmp_greater_equal
- std::in_range
- std::declval
- std::forward
- std::move
- std::move_if_noexcept
- std::chars_format
- std::piecewise_construct_t
- std::piecewise_construct
- std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t
- 注é
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å·¥å ·åº >std::pair > operator==,!=,<,<=,>,>=,<=>(std::pair)
operator==,!=,<,<=,>,>=,<=>(std::pair)
constexpr bool operator==( const std::pair<T1,T2>& lhs,
(C++20 å)
(C++20 å)
(C++20 å)
(C++20 å)
(C++20 å)
1-2) æµè¯ lhs å rhs ç两个å
ç´ æ¯å¦åç¸çï¼å³æ¯è¾
lhs.first å rhs.first å lhs.second å rhs.second3-6) ç¨ operator< æåå
¸åºæ¯è¾
lhs å rhs ï¼å³æ¯è¾é¦å
ç´ ï¼ç¶åä»
è¥å®ä»¬çä»·ï¼åæ¯è¾ç¬¬äºå
ç´ ã7) ç¨åæä¸è·¯æ¯è¾æåå
¸åºæ¯è¾
è¿åç±»å为
lhs å rhs ï¼å³æ¯è¾é¦å
ç´ ï¼ç¶åä»
è¥å®ä»¬çä»·ï¼åæ¯è¾ç¬¬äºå
ç´ ãè¿åç±»å为
T1 ä¸ T2 ä¸çåæä¸è·¯æ¯è¾ç±»åçç»æç±»åçå
±ç¨æ¯è¾ç±»å«ç±»åã
åæä¸è·¯æ¯è¾ç»å®å¯¹è±¡ç±»å
lhs < rhs ? std::weak_ordering::less : rhs < lhs ? std::weak_ordering::greater : std::weak_ordering::equivalent
è¥ three_way_comparable_with æ |
(C++20 èµ·) |
åæ°
| lhs, rhs | - | è¦æ¯è¾ç pair |
è¿åå¼
1) è¥
lhs.first == rhs.first ä¸ lhs.second == rhs.second å为 true ï¼å¦å为 false2)
!(lhs == rhs)3) è¥
lhs.first<rhs.first åè¿å true ãå¦åï¼è¥ rhs.first<lhs.first åè¿å false ãå¦åï¼è¥ lhs.second<rhs.second åè¿å true ãå¦åè¿å false ã4)
!(rhs < lhs)5)
rhs < lhs6)
!(lhs < rhs)7) è¥ synth_three_way(lhs.first, rhs.first) ä¸çäº
0 å为å®ï¼å¦å为 synth_three_way(lhs.second, rhs.second) ï¼å
¶ä¸ synth_three_way æ¯ä»
ç¨äºééçè¿è¡åæä¸è·¯æ¯è¾ç彿°å¯¹è±¡ã示ä¾
å 为 operator< 为 pair å®ä¹ï¼æ pair ç容å¨è½æåºã
è¿è¡æ¤ä»£ç
#include <iostream> #include <utility> #include <vector> #include <algorithm> #include <string> Â 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 << "," << p.second << ")\n"; } }
è¾åºï¼
(1,foo) (2,bar) (2,baz)