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::unordered_map<Key,T,Hash,KeyEqual,Allocator>::operator[]
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::get_allocator
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::begin, std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::cbegin
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::empty
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::end, std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::cend
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::unordered_map
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::~unordered_map
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::operator=
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::size
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::max_size
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::clear
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert_or_assign
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::emplace
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::emplace_hint
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::try_emplace
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::erase
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::swap
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::extract
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::merge
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::at
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::count
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::find
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::contains
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::equal_range
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::begin(size_type), std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::cbegin(size_type)
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::end(size_type), std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::cend(size_type)
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::bucket_count
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::max_bucket_count
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::bucket_size
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::bucket
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::load_factor
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::max_load_factor
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::rehash
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::reserve
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::hash_function
- std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::key_eq
- operator==,!=(std::unordered_map)
- std::swap(std::unordered_map)
- std::erase_if (std::unordered_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++ åèæå >容å¨åº >std::unordered_map > std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert
std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert
| std::pair<iterator,bool> insert( const value_type& value ); |
(1) | (C++11 èµ·) |
| std::pair<iterator,bool> insert( value_type&& value ); |
(1) | (C++17 èµ·) |
| template< class P > std::pair<iterator,bool> insert( P&& value ); |
(2) | (C++11 èµ·) |
| iterator insert( const_iterator hint, const value_type& value ); |
(3) | (C++11 èµ·) |
| iterator insert( const_iterator hint, value_type&& value ); |
(3) | (C++17 èµ·) |
| template< class P > iterator insert( const_iterator hint, P&& value ); |
(4) | (C++11 èµ·) |
| template< class InputIt > void insert( InputIt first, InputIt last ); |
(5) | (C++11 èµ·) |
| 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 ãéè½½ (2) çä»·äº emplace(std::forward<P>(value)) ï¼ä¸ä»
è¥ std::is_constructible<value_type, P&&>::value == true æåä¸éè½½å³è®®ãvalue ï¼ä»¥ hint 为åºå½å¼å§æç´¢çä½ç½®çé强å¶å»ºè®®ãéè½½ (4) çä»·äº emplace_hint(hint, std::forward<P>(value)) ï¼ä¸ä»
è¥ std::is_constructible<value_type, P&&>::value == true æåä¸éè½½å³è®®ã[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() åè¡ä¸ºæªå®ä¹ãè¥å æå ¥åçéåå¸ï¼åææè¿ä»£å¨é½è¢«éæ³åãå¦åè¿ä»£å¨ä¸åå½±åãå¼ç¨ä¸åå½±åãéåå¸ä» è¥æ°å ç´ æ°éå¤§äº max_load_factor()*bucket_count() æåçãè¥æå ¥æåï¼åå¨ç»ç¹ææä¿æå ç´ æ¶è·å¾çæå该å ç´ çæéåå¼ç¨è¢«éæ³åï¼è卿ååè·å¾çæåå ç´ çæéåå¼ç¨åå¾åæ³ã (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-6 |
å¤æåº¦
O(1) ï¼æåæ
åµ O(size())O(N) ï¼å
¶ä¸ N æ¯è¦æå
¥çå
ç´ æ°ãæåæ
åµï¼ O(N*size()+N)O(1) ï¼æåæ
åµ O(size())注æ
ææç¤ºæå ¥ (3,4) ä¸è¿å bool ï¼è¿æ¯ä¸ºäºä¸é¡ºåºå®¹å¨ä¸çå®ä½æå ¥ï¼å¦ std::vector::insert ç¾åå ¼å®¹ãè¿ä½¿å¾å¯ä»¥å建æ³åæå ¥å¨ï¼ä¾å¦ std::inserter ãæ£æ¥ææç¤ºæå ¥æ¯å¦æåçä¸ç§æ¹å¼æ¯æ¯è¾æå ¥ååç size() ã
示ä¾
#include <string> #include <iostream> #include <unordered_map> Â int main () { std::unordered_map<int, std::string> dict = {{1, "one"}, {2, "two"}}; dict.insert({3, "three"}); dict.insert(std::make_pair(4, "four")); dict.insert({{4, "another four"}, {5, "five"}}); Â bool ok = dict.insert({1, "another one"}).second; std::cout << "inserting 1 -> \"another one\" " << (ok ? "succeeded" : "failed") << '\n'; Â std::cout << "contents:\n"; for(auto& p: dict) std::cout << " " << p.first << " => " << p.second << '\n'; }
å¯è½çè¾åºï¼
inserting 1 -> "another one" failed contents: 5 => five 1 => one 2 => two 3 => three 4 => four
åé
| å使é å
ç´ (å ¬å¼æå彿°) | |
| ä½¿ç¨æç¤ºå使é å
ç´ (å ¬å¼æå彿°) | |
| (C++17) |
æå
¥å
ç´ ï¼æè¥å
³é®å·²åå¨åèµå¼ç»å½åå
ç´ (å ¬å¼æå彿°) |