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::set<Key,Compare,Allocator>::insert
- std::set<Key,Compare,Allocator>::erase
- std::set<Key,Compare,Allocator>::end, std::set<Key,Compare,Allocator>::cend
- std::set<Key,Compare,Allocator>::set
- std::set<Key,Compare,Allocator>::~set
- std::set<Key,Compare,Allocator>::operator=
- std::set<Key,Compare,Allocator>::empty
- 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++ åèæå >容å¨åº >std::set > std::set<Key,Compare,Allocator>::insert
std::set<Key,Compare,Allocator>::insert
| std::pair<iterator,bool> insert( const value_type& value ); |
(1) | |
| std::pair<iterator,bool> insert( value_type&& value ); |
(2) | (C++11 èµ·) |
| (3) | ||
| iterator insert( iterator hint, const value_type& value ); |
(C++11 å) | |
| iterator insert( const_iterator hint, const value_type& value ); |
(C++11 èµ·) | |
| iterator insert( const_iterator hint, value_type&& value ); |
(4) | (C++11 èµ·) |
| template< class InputIt > void insert( InputIt first, InputIt last ); |
(5) | |
| void insert( std::initializer_list<value_type> ilist ); |
(6) | (C++11 èµ·) |
| insert_return_type insert(node_type&& nh); |
(7) | (C++17 èµ·) |
| iterator insert(const_iterator hint, node_type&& nh); |
(8) | (C++17 èµ·) |
æå ¥å ç´ å°å®¹å¨ï¼è¥å®¹å¨æªå«æ¥æçä»·å ³é®çå ç´ ã
value ãvalue å°å°½å¯è½æ¥è¿ï¼æ£å¥½åäº(C++11 èµ·) hint çä½ç½®ã[first, last) çå
ç´ ã è¥èå´ä¸çå¤ä¸ªå
ç´ æ¥ææ¯è¾çä»·çå
³é®ï¼åæå
¥åªä¸ªå
ç´ æ¯æªæå®çï¼å¾
å³ç LWG2844 ï¼ãilist çå
ç´ ã è¥èå´ä¸çå¤ä¸ªå
ç´ æ¥ææ¯è¾çä»·çå
³é®ï¼åæå
¥åªä¸ªå
ç´ æ¯æªæå®çï¼å¾
å³ç LWG2844 ï¼ãnh æ¯ç©ºçç»ç¹ææï¼åä¸åä»»ä½äºãå¦åæå
¥ nh æå æçå
ç´ å°å®¹å¨ï¼è¥å®¹å¨å°æªå«ææ¥æçä»·äº nh.key() çå
³é®çå
ç´ ãè¥ nh éç©ºä¸ get_allocator() != nh.get_allocator() åè¡ä¸ºæªå®ä¹ãnh æ¯ç©ºçç»ç¹ææï¼åä¸åä»»ä½äºå¹¶è¿åå°¾è¿ä»£å¨ãå¦åï¼æå
¥ nh æå æçå
ç´ å°å®¹å¨ï¼è¥å®¹å¨å°æªå«ææ¥æçä»·äº nh.key() çå
³é®çå
ç´ ï¼å¹¶è¿åæåæ¥æçäº nh.key() çå
³é®çå
ç´ çè¿ä»£å¨ï¼æ å
³ä¹æå
¥æåè¿æ¯å¤±è´¥ï¼ãè¥æå
¥æåï¼åä» nh ç§»å¨ï¼å¦åå®ä¿æè¯¥å
ç´ çæææãå
ç´ è¢«æå
¥å°å°½å¯è½æ¥è¿æ£å¥½å
äº hint çä½ç½®ãè¥ nh éç©ºä¸ get_allocator() != nh.get_allocator() åè¡ä¸ºæªå®ä¹ã没æè¿ä»£å¨æå¼ç¨è¢«éæ³åãè¥æå ¥æåï¼åå¨ç»ç¹ææä¿æå ç´ æ¶è·å¾çæå该å ç´ çæéåå¼ç¨è¢«éæ³åï¼è卿ååè·å¾çæåå ç´ çæéåå¼ç¨åå¾åæ³ã (C++17 èµ·)
åæ°
| hint | - |
| ||||
| value | - | è¦æå ¥çå ç´ å¼ | ||||
| first, last | - | è¦æå ¥çå ç´ èå´ | ||||
| ilist | - | æå ¥å¼æ¥æºç initializer_list | ||||
| nh | - | å ¼å®¹çç»ç¹ææ | ||||
| ç±»åè¦æ± | ||||||
-InputIt å¿
须满足éçè¾å
¥è¿ä»£å¨ (LegacyInputIterator) çè¦æ±ã
| ||||||
è¿åå¼
insert_return_type ï¼å
¶æååå§åå¦ä¸ï¼è¥ nh 为空ï¼å inserted 为 false ï¼ position 为 end() ï¼è node 为空ãå¦ååçæå
¥ï¼ inserted 为 true ï¼ position æå被æå
¥å
ç´ ï¼è node 为空ãè¥æå
¥å¤±è´¥ï¼å inserted 为 false ï¼ node æ¥æ nh çå
åå¼ï¼è position æåæ¥æçä»·äº nh.key() çå
³é®çå
ç´ ãnh 为空å为尾è¿ä»£å¨ï¼è¥æå
¥åçå为æå被æå
¥å
ç´ çè¿ä»£å¨ï¼èè¥æå
¥å¤±è´¥å为æåæ¥æçä»·äº nh.key() çå
³é®çå
ç´ çè¿ä»£å¨ãå¼å¸¸
| æ¬èæªå®æ åå ï¼æ åµ 5-8 |
å¤æåº¦
O(log(size())) ã|
3-4) è¥æå
¥æ°å¥½åç卿£å¥½åäº hint çä½ç½®ï¼å为åæå¸¸æ°ï¼å¦åä¸å®¹å¨å¤§å°æå¯¹æ°ã
|
(C++11 å) |
|
3-4) è¥æå
¥æ°å¥½åç卿£å¥½å
äº hint çä½ç½®ï¼å为åæå¸¸æ°ï¼å¦åä¸å®¹å¨å¤§å°æå¯¹æ°ã
|
(C++11 èµ·) |
O(N*log(size() + N)) ï¼å
¶ä¸ N æ¯è¦æå
¥çå
ç´ æ°ãO(log(size())) ãæ³¨æ
ææç¤ºæå ¥ (3,4) ä¸è¿å bool ï¼è¿æ¯ä¸ºäºä¸é¡ºåºå®¹å¨ä¸çå®ä½æå ¥ï¼å¦ std::vector::insert ç¾åå ¼å®¹ãè¿ä½¿å¾å¯ä»¥å建æ³åæå ¥å¨ï¼ä¾å¦ std::inserter ãæ£æ¥ææç¤ºæå ¥æ¯å¦æåçä¸ç§æ¹å¼æ¯æ¯è¾æå ¥ååç size() ã
éè½½ (5,6) é常å®ç°ä¸ºå¾ªç¯ï¼å ¶ä¸ä»¥ end() 为 hint è°ç¨éè½½ (3) ï¼å®ä»¬å¯¹åéæå°å ç´ å¤§äº *this 䏿大å ç´ çæåºåºåï¼ä¾å¦å¦ä¸ set ï¼ä¼åã
示ä¾
#include <set> #include <cassert> #include <iostream>  int main() { std::set<int> set;  auto result_1 = set.insert(3); assert(result_1.first != set.end()); // 宿¯åæ³è¿ä»£å¨ assert(*result_1.first == 3); if (result_1.second) std::cout << "insert done\n";  auto result_2 = set.insert(3); assert(result_2.first == result_1.first); // ç¸åè¿ä»£å¨ assert(*result_2.first == 3); if (!result_2.second) std::cout << "no insertion\n"; }
è¾åºï¼
insert done no insertion
åé
| (C++11) |
å使é å
ç´ (å ¬å¼æå彿°) |
| (C++11) |
ä½¿ç¨æç¤ºå使é å
ç´ (å ¬å¼æå彿°) |