STL之容器——set/multiset

set/multiset:是关联容器,由红黑树实现。

一:特点

1.由红 黑树 实现,内部元素自动排序,元素位置和插入次序无关;

2.set容器每个元素仅能出现一次,不允许重复;multiset允许重复元素;

3.插入删除操作不需要内存拷贝和内存移动;

4.修改元素值,是先删除原有元素,然后插入新的元素。

二:定义与初始化

set<int> s;//默认升序
set<int, less<int>> s1 = { 1,2,3,4 };//升序{1,2,3,4}
set<int, greater<int>> s2{ 1,2,3,4 };//降序{4,3,2,1}
set<int> s3{ 1,2,2,3 };//{1,2,3}

multiset<int> s4;
multiset<int, less<int>>s5 = { 1,2,3,4 };
multiset<int, greater<int>>s6{ 1,2,3,4 };
multiset<int> s7{ 1,2,2,3 };//{1,2,2,3}

set和multiset操作特性基本一致,区别在于set不允许重复元素,而multiset允许重复元素。

三:基本操作

//查找find: 如果找到查找的元素值,则返回该值的迭代器位置,否则返回集合最后一个元素后一个位置的迭代器,即end();
set<int>::iterator it;
it = s1.find(3);
if (it != s1.end())
{
    cout << *it << endl;
}
else
{
    cout << "not find" << endl;
}

  
//插入
s1.insert({ 5,6 });

    
//删除    
s1.erase(1);    
s1.erase(s1.begin(), s1.begin()++);   
s1.erase(s1.begin()++);//不支持it+n,仅支持it++

   
s1.size();   
s1.max_size(); //可容纳的最大元素的数量   
s1.count(1);//set为0或者1,multiset可大于1    
s1.clear();

四:总结

1.时间复杂度:查询,插入,删除都为O(log(n));

2.查找一个元素是否存在于某集合中,唯一存在的情况使用 set,不唯一存在的情况使用 multiset。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值