1. 程式人生 > 其它 >關聯容器常用用法

關聯容器常用用法

總結

注意點
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)