C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- std::array
- std::vector
- std::map
- std::unordered_map
- std::priority_queue
- std::span
- std::forward_list
- std::deque
- std::list
- std::set
- std::multiset
- std::multimap
- std::unordered_set
- std::unordered_multiset
- std::unordered_multimap
- std::stack
- std::queue
- std::vector<bool>
- ç»ç¹ææ (C++17)
- 注é
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >容å¨åº > ç»ç¹ææ (C++17)
ç»ç¹ææ (C++17)
| template</*unspecified*/> class /*node-handle*/; |
(C++17 èµ·) | |
å ³èå®¹å¨ std::set ã std::map ã std::multiset ã std::multimap ã std::unordered_set ã std::unordered_map ã std::unordered_multiset ã std::unordered_multimap æ¯åºäºç»ç¹çæ°æ®ç»æï¼èä¸å¯ç¨ç§°ä½ç»ç¹ææçæªæå®ç±»åç对象éåºå ¶ç»ç¹ã
ç»ç¹æææ¯ä»
ç§»å¨ç±»åï¼å®å æå
ç´ ï¼ value_type ï¼å¹¶æä¾å¯¹å
ç´ ç访é®ï¼å¹¶æä¾å¯¹å
ç´ é®é¨åï¼ key_type ï¼å被æ å°é¨åï¼ mapped_type ï¼çé const 访é®ãè¥å
è®¸å¨ææç»ç¹æ¶ææç»ç¹ææï¼åç¨å®¹å¨çåé
卿£ç¡®å°ææç»ç¹ãç»ç¹ææå«æå®¹å¨åé
å¨ç坿¬ï¼è¿æ¯ç»ç¹ææè½å¨å®¹å¨çåæå¤å卿å¿
é¡»çã
ç»ç¹ææçå确类åï¼æ¤å¤æ¾ç¤ºä¸º /*node-handle*/ ï¼æ¯æªæå®çï¼ä½æ¯ä¸ªå®¹å¨é½æ´é²å
¶ç»ç¹ææç±»å为æå node_type ã
ç»ç¹ææè½ç¨äºå¨äºä¸ªæç¸åé®ãå¼ååé å¨ç±»åï¼å¿½ç¥æ¯è¾æåå¸/ç¸çæ§ï¼çå ³è容å¨é´ä¼ éç»ç¹çæææï¼èæ éè°ç¨ä»»ä½å®¹å¨å ç´ ä¸çå¤å¶/ç§»å¨æä½ï¼è¿ç§æä½è¢«ç§°ä¸ºâæ¥åâï¼ãå¨å¯ä¸åéå¯ä¸å®¹å¨é´ä¼ é乿¯å®¹è®¸çï¼æ¥èª std::map çç»ç¹ææè½æå ¥ std::multimap ï¼ä½ä¸è½æå ¥ std::unordered_map æ std::set ã
ç»ç¹ææå¯ä»¥ä¸ºç©ºï¼è¯¥æ
åµä¸å®ä¸ä¿æå
ç´ ååé
å¨ãé»è®¤æé å被移å¨çç»ç¹æææ¯ç©ºçãå¦å¤ï¼ç©ºçç»ç¹ææå¯ç±å¯¹å®¹å¨æå彿° extract ç失败è°ç¨äº§çã
è¥æåå°å ç´ æå ¥å®¹å¨ï¼å为ç»ç¹æææå ææ¶è·å¾çå°è¯¥å ç´ çå¼ç¨ææéä¼è¢«éæ³åã
å¯¹äºææ key_type 为 K è mapped_type 为 T çæ å°å®¹å¨ï¼ std::map ã std::multimap ã std::unordered_map å std::unordered_multimap ï¼ï¼è¥å¯¹ std::pair<K, T> æ std::pair<const K, T> åå¨ std::pair çç¨æ·å®ä¹ç¹åï¼åæ¶åç»ç¹ææçæä½è¡ä¸ºæªå®ä¹ã
æåç±»å
| Â | |
| æåç±»å | å®ä¹ |
key_type(ä»
map 容å¨)
|
åå¨äºç»ç¹çå ³é® |
mapped_type(ä»
map 容å¨)
|
åå¨äºç»ç¹çå ç´ ç被æ å°é¨å |
value_type(ä»
set 容å¨)
|
åå¨äºç»ç¹çå ç´ |
allocator_type
|
鿝å ç´ æ¶ä½¿ç¨çåé å¨ |
æå彿°
æé 彿°
| constexpr /*node-handle*/() noexcept; |
(1) | |
| /*node-handle*/(/*node-handle*/&& nh) noexcept; |
(2) | |
nh å走容å¨å
ç´ æææï¼ç§»å¨æé æååé
å¨ï¼å¹¶ä»¤ nh çå¨ç©ºç¶æãåæ°
| nh | - | åç±»åçç»ç¹ææï¼ä¸å¿ å±äºç¸å容å¨ï¼ |
注æ
ç»ç¹æææ¯ä» ç§»å¨çï¼ä¸å®ä¹å¤å¶æé 彿°ã
operator=
| /*node-handle*/& operator=(/*node-handle*/&& nh); |
||
- è¥ç»ç¹ææé空ï¼
- åéè¿è°ç¨
std::allocator_traits<allocator_type>::destroyï¼éæ¯æ¤ç»ç¹æææç®¡çç容å¨å ç´ å¯¹è±¡ä¸çvalue_typeåå¯¹è±¡ï¼ - éè¿è°ç¨
allocator_traits<allocator_type>::rebind_traits<container-node-type>::deallocateè§£åé 容å¨å ç´ ï¼
- åéè¿è°ç¨
- ä»
nhè·å¾å®¹å¨å ç´ çæææï¼ - è¥ç»ç¹ææä¸ºç©ºï¼ä»èä¸å«åé
å¨ï¼æè¥
allocator_traits<allocator_type>::propagate_on_container_move_assignment为trueï¼åä»nhç§»å¨èµå¼åé å¨ï¼ - 设置
nhä¸ºç©ºç¶æã
è¥ç»ç¹éç©ºä¸ allocator_traits<allocator_type>::propagate_on_container_move_assignment 为 false ä¸åé
卿¯è¾ä¸ç¸çï¼åè¡ä¸ºæªå®ä¹ã
åæ°
| nh | - | åç±»åçç»ç¹ææï¼ä¸å¿ å±äºç¸å容å¨ï¼ |
è¿å
*this
å¼å¸¸
ï¼æ ï¼
注æ
ç»ç¹æææ¯ä» ç§»å¨çï¼ä¸å®ä¹å¤å¶èµå¼ã
ææå½æ°
| ~/*node-handle*/(); |
||
- è¥ç»ç¹ææé空,
- åéè¿è°ç¨
std::allocator_traits<allocator_type>::destroyï¼éæ¯æ¤ç»ç¹æææç®¡çç容å¨å ç´ å¯¹è±¡ä¸çvalue_typeåå¯¹è±¡ï¼ - éè¿è°ç¨
allocator_traits<allocator_type>::rebind_traits<container-node-type>::deallocateè§£åé 容å¨å ç´ ã
- åéè¿è°ç¨
empty
| bool empty() const noexcept; |
(C++20 å) | |
| [[nodiscard]] bool empty() const noexcept; |
(C++20 èµ·) | |
è¥ç»ç¹ææä¸ºç©ºåè¿å true ï¼å¦åè¿å false ã
operator bool
| explicit operator bool() const noexcept; |
||
è¥ç»ç¹ææä¸ºç©ºå转æ¢ä¸º false ï¼å¦åè¿å true ã
get_allocator
| allocator_type get_allocator() const; |
||
è¿ååå¨çåé å¨ï¼å®æ¯æºå®¹å¨çåé å¨å¯æ¬ï¼ç坿¬ãè¥ç»ç¹ææä¸ºç©ºåè¡ä¸ºæªå®ä¹ã
å¼å¸¸
ï¼æ ï¼
value
| value_type& value() const; |
(ä» set 容å¨) | |
è¿åå°æ¤ç»ç¹æææç®¡çç容å¨å
ç´ å¯¹è±¡ä¸ç value_type å对象çå¼ç¨ãè¥ç»ç¹ææä¸ºç©ºåè¡ä¸ºæªå®ä¹ã
å¼å¸¸
ï¼æ ï¼
key
| key_type& key() const; |
(ä» map 容å¨) | |
è¿åå°æ¤ç»ç¹æææç®¡çç容å¨å
ç´ å¯¹è±¡ä¸ç value_type å对象ç key_type æåçé const å¼ç¨ãè¥ç»ç¹ææä¸ºç©ºåè¡ä¸ºæªå®ä¹ã
å¼å¸¸
ï¼æ ï¼
注æ
æ¤å½æ°ä½¿å¾è½å¤ä¿®æ¹ä»æ å°éåºçç»ç¹çé®ï¼åéæå ¥å°æ å°ï¼èæ éå¤å¶æç§»å¨å ç´ ã
mapped
| mapped_type& mapped() const; |
(ä» map 容å¨) | |
è¿åå°æ¤ç»ç¹æææç®¡çç容å¨å
ç´ å¯¹è±¡ä¸ç value_type å对象ç mapped_type æåçå¼ç¨ãè¥ç»ç¹ææä¸ºç©ºåè¡ä¸ºæªå®ä¹ã
å¼å¸¸
ï¼æ ï¼
swap
| void swap(/*node-handle*/& nh) noexcept(/* see below */); |
||
- 交æ¢å®¹å¨ç»ç¹çæææï¼
- è¥ä¸ä¸ªç»ç¹ä¸ºç©ºæä¸¤ä¸ªç»ç¹å为é空ä¸
std::allocator_traits<allocator_type>::propagate_on_container_swap为trueï¼åä¸å交æ¢åé å¨ã
è¥ä¸¤ä¸ªç»ç¹å为éç©ºä¸ allocator_traits<allocator_type>::propagate_on_container_swap 为 false èåé
卿¯è¾ä¸ç¸çï¼åè¡ä¸ºæªå®ä¹ã
å¼å¸¸
 std::allocator_traits<allocator_type>::is_always_equal::value)
éæå彿°
swap
| friend void swap(/*node-handle*/& x, /*node-handle*/& y) noexcept(noexcept(x.swap(y))); |
||
çæå°æ§è¡ x.swap(y) ã