C++进阶 —— set

目录

一,set介绍

二,set使用


一,set介绍

  • set是按照特定次序存储元素的关联式容器,元素不可重复;
  • set中的元素不能在容器中修改(元素总是const),但是可从容器中插入和删除它们;
  • set中的元素总是按照其内部比较对象(compare)所指示的特定严格弱排序准则进行排序;
  • set容器通过key访问单个元素的速度通常比unordered_set容器慢,但永许根据顺序对子集进行直接迭代;
  • set在底层是用二叉搜索树(红黑树)实现的;

注:

  • map/multimap中存储的是真正的键值对,set中只放value,但底层实际存放的是由<value、value>构成的键值对;
  • set中的元素不允许修改;
  • set中的元素不可重复(因此可使用set进行去重);
  • set中插入元素时,只需要插入value即可,不需要构成键值对;
  • 使用set的迭代器遍历set中的元素,可得到有序序列;
  • set中的元素默认按照小于来比较;
  • set中查找某个元素,实际复杂度为O(logN);

二,set使用

构造函数

操作函数

//迭代器
      iterator begin() noexcept;
const_iterator begin() const noexcept;
      iterator end() noexcept;
const_iterator end() const noexcept;
      reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
      reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;

//插入
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);

//删除
iterator  erase (const_iterator position);
size_type erase (const value_type& val);
iterator  erase (const_iterator first, const_iterator last);

//查找
const_iterator find (const value_type& val) const;
      iterator find (const value_type& val);

bool empty() const noexcept;
size_type size() const noexcept;
size_type count (const value_type& val) const;
void swap (set& x);
void clear() noexcept;

key_compare key_comp() const;
value_compare value_comp() const;

      iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;
      iterator upper_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;

pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
            pair<iterator,iterator> equal_range (const value_type& val);
int main()
{
	int arr[] = { 5,3,4,1,7,8,2,6,0,9,1,5 };
	int sz = sizeof(arr) / sizeof(int);

	set<int> s(arr, arr + sz);
	cout << s.size() << endl;
	s.insert(10);
	s.erase(1);

	for (auto& e : s)
	{
		cout << e << " "; //可去重
	}
	cout << endl;

	for (auto it = s.rbegin(); it != s.rend(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;

	cout << s.count(1) << endl;

	s.empty();
	s.clear();
	return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>