STL中的set

1、set的基本概念
set与map相同的是:底层均采用红黑树,因此所有元素都会根据元素的键值自动排序,与map不同的是:map中存放真正的键值对<key,value>,而set中的value就是key,key就是value,虽然set提供给用户的接口只存放value,而实际底层真正存放的是<value, value>的键值对,即set中key就是value,value就是key。

2、set的基本操作
使用set时必须包含头文件以及std标准命名空间。
(1)insert():插入数据。
(2)erase():删除数据。
(3)find():查找数据。
(4)clear():数据的清空。
(5)empty():数据的判空。
(6)size():获取有效元素的大小。
(7)count():获取键值中查找元素的个数。如果有返回1,否则返回0。
(8)rbegin():在反向迭代器中表示起始元素。
(9)rend():在反向迭代器中表示末尾元素。
(10)operator[key]:通过键值(key)获取该key对应的value。
(11)lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。
(12)upper_bound(val):返回容器中第一个值【大于】。
(13)max_size():返回set中最多包含的元素个数。
【例】

#include<iostream>
#include<stdlib.h>
#include<set>

using namespace std;

void TestSet1()
{
    //用set对数组中的元素去重,并排序
    int array[] = { 1, 2, 3, 3, 4, 2, 8, 2, 1, 4, 5, 7, 6, 9 };
    set<int> set1;
    for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
    {
        set1.insert(array[i]);
    }
    cout << "set的size值为:"<< set1.size() << endl;
    cout << "set的maxsize的值为:" << set1.max_size() << endl;
    cout << "set中的第一个元素为:" << *set1.begin() << endl;
    //cout << "set中的最后一个元素为:" << *set1.end() << endl;
    cout << "set的元素有:";
    set<int>::iterator iter = set1.begin();
    while (iter != set1.end())
    {
        cout << *iter << " ";
        iter++;
    }
    cout << endl;

    //使用erase删除元素1
    set1.erase(1);
    cout << "使用erase删除元素1后,set的size值为:" << set1.size() <<  endl;

    //使用STL算法find元素1
    iter = find(set1.begin(), set1.end(), 1);
    if (iter == set1.end())
    {
        cout << "1 is not in set!" << endl;
    }
    else
    {
        cout << "1 is in set!" << endl;
    }
 
    set1.clear();
    if (set1.empty())
    {
        cout << "set.clear()后,set为空!" << endl;
    }
    cout << "set的size值为:" << set1.size() << endl;
    cout << "set的maxsize的值为:" << set1.max_size() << endl;
}

int main()
{
    TestSet1();
    system("pause");
    return 0;
}

运行结果为:
在这里插入图片描述
注意:
1)set中的元素不能直接修改。
2)begin()和end()函数是不检查set是否为空的,使用钱最好使用empty()检查set是否为空。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值