【C++容器】set——有序集合

目录

头文件

定义一个set

底层逻辑

基本操作

代码演示

补充:unorder_set——无序集合


头文件:

#include <set>

定义一个set:

set<int> s;

底层逻辑:红黑树。

(输入数据有序存储,基本操作的复杂度大多为对数级

基本操作:

int x;
int* pos;
s.insert(x);//插入元素x
clear();//清除所有元素
s.erase(x);//删除元素x
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
s.size(x);//返回s的大小
s.count(x);//返回x元素出现次数
s.begin();//返回第一个元素的迭代器
s.end();//返回最后一个元素的迭代器的下一位
s.find(x);//查找x,若存在,返回该键的元素的迭代器;若不存在,返回s.end();
s.empty();//返回set是否为空

值得一提的是:由于set本身具有元素不能重复的性质,故count的效果实际上更像查找,若找到则返回1(1个元素),未找到返回0。

代码演示:

#include <iostream>
#include <set>
using namespace std;

int main()
{
    //建立并初始化一个set
    set<int> s;
    s.insert(2);
    s.insert(0);
    s.insert(2);
    s.insert(2);
    s.insert(2022);
    s.insert(2222);

    //拷贝一份
    set<int>s_temp(s.begin(), s.end());

    //验证size的功能和set自带的去重效果
    cout << s.size() << endl;

    //count的效果:判断存在与否
    if (s.count(0)) cout << "Y" << endl;
    else cout << "N" << endl;

    //验证begin的功能
    auto temp = s.begin();
    cout << *temp << endl;

    //验证find的功能
    auto t = s.find(2022);
    cout << *t << endl;

    //验证eraser的功能
    s.erase(0);
    cout << s.size() << endl;
    if (s.count(0)) cout << "Y" << endl;
    else cout << "N" << endl;

    //对比输出(内部是有序的)
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << " ";  
    cout << endl;
    for (auto it = s_temp.begin(); it != s_temp.end(); it++)
        cout << *it << " ";

    return 0;
}

结果如下:

4
Y
0
2022
3
N
2 2022 2222
0 2 2022 2222

补充:unorder_set——无序集合

底层逻辑:哈希表

(输入数据无序存储,基本操作的复杂度大多为常数级

定义一个无序集合:

unordered_set<int> s;

其他操作方法与set相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值