【C++】关联式容器set

set是按照一定次序存储元素的容器,在set中他的value也标识它(value就是key,类型是T),并且每个value是唯一的,set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入和删除他们,底层使用红黑树实现。
结论:

  • 与map/multimap不同,map/multimap中存储的是真正的键值对<key,value>,set只放value,但底层存放的是由<key,value>构成的键值对。
  • set中插入元素,只需要插入value不需要构造键值对。
  • set中元素不可重复。
  • 使用set迭代器遍历set中的元素,可以得到有序序列。
  • set中按照小于比较。
  • set中查找某个元素,时间复杂度为O(logN)。
  • set中元素不允许修改。
  • 底层使用红黑树。

T:set中存放元素的类型,实际存放<key,value>的键值对。
compare:按照小于比较。
set构造

  • set (const Compare& comp = Compare(), const Allocator& =
    Allocator() ); 构造空的set
  • set (InputIterator first, InputIterator last, const Compare&
    comp = Compare(), const Allocator& = Allocator() );
    用[first, last)区间中的元素构造set
  • set ( const set<Key,Compare,Allocator>& x); set的拷贝构造

set迭代器

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

set插入

pair<iterator,bool> insert(const value_type& x);
iterator insert(irterator position, const value_type& x);
template
void insert(InputIterator first,InputIterator last);
pair
pair是将2个数据组合为一个数据,如map将<key,value>放在一起保存,当一个函数需要返回2个数据的时候,需要使用pair。
pair实现

template<class T1,class T2>
struct pair
{
	pair(T1 _first,T2 _second)
		:first(_first)
		,second(_second)
	{}
	T1 first;
	T2 second;
};

将两个数据合成一个数据,也可以使用make_pair。

template<class T1,class T2>
pair<T1,T2> make_pair(T1 first,T2 second)
{
	return pair<T1,T2>(first,second);
}

set遍历的注意点
红黑树遍历是中序遍历,所以s.begin()是最左结点;
s.end()是最后一个结点的后一个;
++it仍然走中序。
set删除

void erase(iterator position);删除set中position位置的元素。
size_type erase(const key_type& x);删除set中值为x的元素,返回删除元素的个数。
void erase (iterator first,iterator last);删除set中[first,last]区间中的元素。

set清空

set.clear();

set查找find

iterator find(const value_type& x) const;
count
size_type count(const value_type& x)const;
返回值只有0或1;
1说明数据存在,0说明不存在。
swap
void swap(set& x);
底层交换的是两个根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值