总结
注意点
0. map 想关的容器,成员是pair
1. set/multiset map/multimap,元素有序(插入值后,按照begin,end输出是有序的)
2. map/unordered_map 可以用[] 或at 访问元素
3. insert(val) 的返回值是 pair
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
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 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 insert (const value_type& val);
pair 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
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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
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 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 insert (const value_type& val);
pair 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
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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
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 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 insert (const value_type& val);
pair 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
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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
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 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 insert (const value_type& val);
pair 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
void insert (InputIterator first, InputIterator last);
//initializer list (4)
void insert (initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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
unordered_set ( 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_set ( const unordered_set& ust );
unordered_set ( const unordered_set& ust, const allocator_type& alloc );
//move (4)
unordered_set ( unordered_set&& ust );
unordered_set ( unordered_set&& ust, const allocator_type& alloc );
//initializer list (5)
unordered_set ( initializer_list 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 insert ( const value_type& val );
(2) single,move
pair 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
void insert ( InputIterator first, InputIterator last );
(6) initializer_list
void insert ( initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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
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 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 insert ( const value_type& val );
(2) single,move
pair 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
void insert ( InputIterator first, InputIterator last );
(6) initializer_list
void insert ( initializer_list 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
pair emplace (Args&&... args);
template
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 equal_range (const value_type& val) const;
pair 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)