关联容器常用用法

总结

注意点
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 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<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)
posted @   木瓜粉  阅读(28)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示