關聯容器常用用法
阿新 • • 發佈:2022-03-26
總結
注意點
0. map 想關的容器,成員是pair <key,vlaue> 1. set/multiset map/multimap,元素有序(插入值後,按照begin,end輸出是有序的) 2. map/unordered_map 可以用[] 或at 訪問元素 3. insert(val) 的返回值是 pair<iterater, bool> 4. 所有關聯容器 erase能通過指定val 刪除元素 5. 所有關聯容器 能執行equal_range 6. set/multiset map/multimap,可以使用lower_bound,upper_bound 7. set/multiset map/multimap, 有雙向迭代器 unordered 只有正向迭代器
set
構造
//empty (1) explicit set (const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type()); explicit set (const allocator_type& alloc); //range (2) 可以使用陣列當作range template <class InputIterator> set (InputIterator first, InputIterator last, const key_compare& comp = key_compare(), const allocator_type& = allocator_type()); //copy (3) set (const set& x); set (const set& x, const allocator_type& alloc); //move (4) set (set&& x); set (set&& x, const allocator_type& alloc); //initializer list (5) set (initializer_list<value_type> il, const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type());
迭代器
//雙向迭代器
//iterator begin,end
//reverse_iterator rbegin,rend
//const_iterator cbegin,cend
//const_reverse_iterator crbegin,crend
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert //single element (1) pair<iterator,bool> insert (const value_type& val); pair<iterator,bool> insert (value_type&& val); //with hint (2) 如果迭代器位置正確可以提升插入效率 iterator insert (const_iterator position, const value_type& val); iterator insert (const_iterator position, value_type&& val); //range (3) template <class InputIterator> void insert (InputIterator first, InputIterator last); //initializer list (4) void insert (initializer_list<value_type> il); //erase //(1) iterator erase (const_iterator position); //(2) 這個過載很特別,類似於remove size_type erase (const value_type& val); //(3) iterator erase (const_iterator first, const_iterator last); //clear void clear() noexcept; //swap void swap (set& x); //emplace template <class... Args> pair<iterator,bool> emplace (Args&&... args); template <class... Args> iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
// lower_bound
iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;
//upper_bound
iterator upper_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
multiset
構造
//empty (1)
explicit multimap (const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
explicit multimap (const allocator_type& alloc);
//range (2)
template <class InputIterator>
multimap (InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
const allocator_type& = allocator_type());
//copy (3)
multimap (const multimap& x);
multimap (const multimap& x, const allocator_type& alloc);
//move (4)
multimap (multimap&& x);
multimap (multimap&& x, const allocator_type& alloc);
//initializer list (5)
multimap (initializer_list<value_type> il,
const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
迭代器
//雙向迭代器
//iterator begin,end
//reverse_iterator rbegin,rend
//const_iterator cbegin,cend
//const_reverse_iterator crbegin,crend
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert
//single element (1)
pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);
//with hint (2) 如果迭代器位置正確可以提升插入效率
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
//range (3)
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list<value_type> il);
//erase
//(1)
iterator erase (const_iterator position);
//(2) 這個過載很特別,類似於remove
size_type erase (const value_type& val);
//(3)
iterator erase (const_iterator first, const_iterator last);
//clear
void clear() noexcept;
//swap
void swap (set& x);
//emplace
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
// lower_bound
iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;
//upper_bound
iterator upper_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
map
構造
//empty (1)
explicit map (const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
explicit map (const allocator_type& alloc);
//range (2)
template <class InputIterator>
map (InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
const allocator_type& = allocator_type());
//copy (3)
map (const map& x);
map (const map& x, const allocator_type& alloc);
//move (4)
map (map&& x);
map (map&& x, const allocator_type& alloc);
//initializer list (5)
map (initializer_list<value_type> il,
const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
迭代器
//雙向迭代器
//iterator begin,end
//reverse_iterator rbegin,rend
//const_iterator cbegin,cend
//const_reverse_iterator crbegin,crend
訪問元素
mapped_type& operator[] (const key_type& k);
mapped_type& operator[] (key_type&& k);
mapped_type& at (const key_type& k);
const mapped_type& at (const key_type& k) const;
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert
//single element (1)
pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);
//with hint (2) 如果迭代器位置正確可以提升插入效率
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
//range (3)
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list<value_type> il);
//erase
//(1)
iterator erase (const_iterator position);
//(2) 這個過載很特別,類似於remove
size_type erase (const value_type& val);
//(3)
iterator erase (const_iterator first, const_iterator last);
//clear
void clear() noexcept;
//swap
void swap (set& x);
//emplace
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
// lower_bound
iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;
//upper_bound
iterator upper_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
multimap
構造
//empty (1)
explicit multimap (const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
explicit multimap (const allocator_type& alloc);
//range (2)
template <class InputIterator>
multimap (InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
const allocator_type& = allocator_type());
//copy (3)
multimap (const multimap& x);
multimap (const multimap& x, const allocator_type& alloc);
//move (4)
multimap (multimap&& x);
multimap (multimap&& x, const allocator_type& alloc);
//initializer list (5)
multimap (initializer_list<value_type> il,
const key_compare& comp = key_compare(),
const allocator_type& alloc = allocator_type());
迭代器
//雙向迭代器
//iterator begin,end
//reverse_iterator rbegin,rend
//const_iterator cbegin,cend
//const_reverse_iterator crbegin,crend
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert
//single element (1)
pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);
//with hint (2) 如果迭代器位置正確可以提升插入效率
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
//range (3)
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list<value_type> il);
//erase
//(1)
iterator erase (const_iterator position);
//(2) 這個過載很特別,類似於remove
size_type erase (const value_type& val);
//(3)
iterator erase (const_iterator first, const_iterator last);
//clear
void clear() noexcept;
//swap
void swap (set& x);
//emplace
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
// lower_bound
iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;
//upper_bound
iterator upper_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
unordered_set
構造
``` //empty (1) explicit unordered_set ( size_type n = /* see below */, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() ); explicit unordered_set ( const allocator_type& alloc ); //range (2) template迭代器
//正向迭代器
//iterator begin,end
//const_iterator cbegin,cend
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert
(1) single
pair<iterator,bool> insert ( const value_type& val );
(2) single,move
pair<iterator,bool> insert ( value_type&& val );
(3) with hint,single
iterator insert ( const_iterator hint, const value_type& val );
(4) with hint,single,move
iterator insert ( const_iterator hint, value_type&& val );
(5) range
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );
(6) initializer_list
void insert ( initializer_list<value_type> il );
//eraes
//by position (1)
iterator erase ( const_iterator position );
//by key (2)
size_type erase ( const key_type& k );
//range (3)
iterator erase ( const_iterator first, const_iterator last );
//clear
void clear() noexcept;
//swap
void swap (multimap& x);
//emplace
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
特殊(待補充)
//Buckets
bucket_count
//Return number of buckets (public member function)
max_bucket_count
//Return maximum number of buckets (public member function)
bucket_size
//Return bucket size (public member type)
bucket
//Locate element's bucket (public member function)
//Hash policy
load_factor
//Return load factor (public member function)
max_load_factor
//Get or set maximum load factor (public member function)
rehash
//Set number of buckets (public member function )
reserve
//Request a capacity change (public member function)
//Observers
hash_function
//Get hash function (public member type )
key_eq
//Get key equivalence predicate (public member type)
get_allocator
//Get allocator (public member function)
unordered_map
構造
//empty (1)
explicit unordered_map ( size_type n = /* see below */,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& alloc = allocator_type() );
explicit unordered_map ( const allocator_type& alloc );
//range (2)
template <class InputIterator>
unordered_map ( InputIterator first, InputIterator last,
size_type n = /* see below */,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& alloc = allocator_type() );
//copy (3)
unordered_map ( const unordered_map& ump );
unordered_map ( const unordered_map& ump, const allocator_type& alloc );
//move (4)
unordered_map ( unordered_map&& ump );
unordered_map ( unordered_map&& ump, const allocator_type& alloc );
//initializer list (5)
unordered_map ( initializer_list<value_type> il,
size_type n = /* see below */,
const hasher& hf = hasher(),
const key_equal& eql = key_equal(),
const allocator_type& alloc = allocator_type() );
迭代器
//正向迭代器
//iterator begin,end
//const_iterator cbegin,cend
容量
size_type size() const noexcept;
bool empty() const noexcept;
修改
//insert
(1) single
pair<iterator,bool> insert ( const value_type& val );
(2) single,move
pair<iterator,bool> insert ( value_type&& val );
(3) with hint,single
iterator insert ( const_iterator hint, const value_type& val );
(4) with hint,single,move
iterator insert ( const_iterator hint, value_type&& val );
(5) range
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );
(6) initializer_list
void insert ( initializer_list<value_type> il );
//eraes
//by position (1)
iterator erase ( const_iterator position );
//by key (2)
size_type erase ( const key_type& k );
//range (3)
iterator erase ( const_iterator first, const_iterator last );
//clear
void clear() noexcept;
//swap
void swap (multimap& x);
//emplace
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
查詢
//count 返回key等於val的元素個數
size_type count (const value_type& val) const;
//find
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
//equal_range 返回pair指示的一個區間,同樣也是左閉右開
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
特殊(待補充)
//Buckets
bucket_count
//Return number of buckets (public member function)
max_bucket_count
//Return maximum number of buckets (public member function)
bucket_size
//Return bucket size (public member type)
bucket
//Locate element's bucket (public member function)
//Hash policy
load_factor
//Return load factor (public member function)
max_load_factor
//Get or set maximum load factor (public member function)
rehash
//Set number of buckets (public member function )
reserve
//Request a capacity change (public member function)
//Observers
hash_function
//Get hash function (public member type )
key_eq
//Get key equivalence predicate (public member type)
get_allocator
//Get allocator (public member function)