关于set的用法

map的元素都是“实值/键值”所形成的一个对组。每个元素都有一个键,是排序的准则。每个键只能出现一次,不允许重复使用。map可以被视为关联式数组,也就是具有任意索引型别的数组。
set内部的元素根据其值自动排序,可以将set视作一种特殊的map,其元素实值就是键值。

关于STL中set的用法:

1、set的迭代器的使用:
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    int arr[] = { 75, 23, 65, 42, 13 };
    set<int>myset(arr, arr + 5);
    set<int>::iterator it1 = myset.begin();//正向迭代器的使用
    while (it1 != myset.end())
    {
        cout << *it1 << " ";
        it1++;
    }
    cout << endl;
    set<int>::reverse_iterator it2 = myset.rbegin();//反向迭代器的使用
    while (it2 != myset.rend())
    {
        cout << *it2 << " ";
        it2++;
    }
    system("pause");
    return 0;
}

这里写图片描述

2、关于set容量的使用方法
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset;
    cout << "empty:"<<myset.empty() << endl;
    cout << "size:"<<myset.size() << endl;
    for (int i = 0; i < 5; i++)
    {
        myset.insert(i);
    }
    cout << "size:" << myset.size() << endl;
    myset.insert(6);
    cout << "size:" << myset.size() << endl;
    cout << "empty:" << myset.empty() << endl;
    system("pause");
    return 0;
}

这里写图片描述

3、关于set的修改操作
这里写图片描述

3.1关于插入操作
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset;
    set<int>::iterator it;
    pair<set<int>::iterator, bool> ret;//如果插入失败则会返回一个pair类型的结构体
    //pair结构体有两个成员在这里定义的第一个成员则是一个set的迭代器类型,第二个成员是一个bool类型
    for (int i = 0; i < 5; i++)
    {
        myset.insert(i * 10);
    }
    ret=myset.insert(20);
    if (ret.second == false)
    {
        it = ret.first;//如果插入失败了,此时set类型的迭代器指向当前插入失败的位置
        cout <<"插入失败" <<*it << endl;
    }
    myset.insert(50);
    myset.insert(60);
    myset.insert(70);
    int arr[] = { 15, 16, 17, 18 };
    myset.insert(arr, arr + 4);//这种方式是按照一段区间直接插入
    it = myset.begin();
    while (it != myset.end())
    {
        cout << *it << " ";
        ++it;
    }
    system("pause");
    return 0;
}

这里写图片描述

3.2、关于删除操作
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset;
    set<int>::iterator it;
    for (int i = 0; i < 5; i++)
    {
        myset.insert(i * 10);
    }   
    myset.erase(0);
    it = myset.begin();
    ++it;
    myset.erase(it);
    it = myset.find(30);
    myset.erase(it,myset.end());
    it = myset.begin();
    while (it != myset.end())
    {
        cout << *it << " ";
        ++it;
    }
    system("pause");
    return 0;
}

这里写图片描述

3.3交换操作
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i * 10);
    }   
    set<int>myset2;
    set<int>::iterator it2;
    for (int i = 5; i < 10; i++)
    {
        myset2.insert(i * 10);
    }
    myset1.swap(myset2);
    it1 = myset1.begin();
    cout << "myset1:";
    while (it1 != myset1.end())
    {
        cout << *it1 << " ";
        ++it1;
    }
    cout << endl;
    it2 = myset2.begin();
    cout << "myset2:";
    while (it2 != myset2.end())
    {
        cout << *it2 << " ";
        ++it2;
    }
    system("pause");
    return 0;
}

这里写图片描述

3.4清除操作
这里写图片描述

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i * 10);
    }   
    myset1.clear();
    cout << "myset1:";
    cout << "size:"<<myset1.size() << endl;
    it1 = myset1.begin();
    while (it1 != myset1.end())
    {
        cout << *it1 << " ";
        ++it1;
    }
    cout << endl;
    system("pause");
    return 0;
}

这里写图片描述

4、比较操作
这里写图片描述
//在这里由于key值和value的值是一样的。方法也一样。

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    set<int>::reverse_iterator it2;
    set<int>::key_compare mycomp;//默认升序
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i * 10);
    }   
    it1 = myset1.begin();
    it2 = myset1.rbegin();
    int last = *it2;
    do
    {
        cout << " " << *it1;
    } while (mycomp(*it1++, last));
    system("pause");
    return 0;
}

这里写图片描述

4、关于set一些其他操作:
这里写图片描述

4.1:查找操作

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i * 10);
    }   
    it1 = myset1.find(20);
    cout << *it1;
    system("pause");
    return 0;
}

这里写图片描述

4.2 判断set中是否有值为key的元素

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i);
    }   
    for (int i = 2; i < 6; i++)
    {
        cout << i;
        if (myset1.count(i)>0)
        {
            cout << "is in set" << endl;
        }
        else
        {
            cout << "is not in set" << endl;
        }
    }
        system("pause");
    return 0;
}

这里写图片描述

4.3
lower_bound(val): 返回容器中第一个值【大于或等于】val的元素的iterator位置。
upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置。

#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
int main()
{
    set<int>myset1;
    set<int>::iterator it1;
    set<int>::iterator itlow;
    set<int>::iterator itupper;
    for (int i = 0; i < 5; i++)
    {
        myset1.insert(i);
    }
    itlow=myset1.lower_bound(2);
    itupper = myset1.upper_bound(3);
    cout << "itlow:" << *itlow << endl;
    cout <<"itupper:" <<*itupper << endl;
    system("pause");
    return 0;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值