码迷,mamicode.com
首页 > 其他好文 > 详细

指纹锁(STL--set)

时间:2021-02-16 12:32:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:目标   初始化   重复元素   同步   ace   bool   fir   tar   printf   

set

其作用是去重,排序。

set常用操作:

#include<set>
//声明一个set容器 
set<typename> s;//定义,typename为数据类型,假设定义了一个容器s 
//常用操作: 
    s.insert(x);//将x插入set容器中,并自动排序,去重
    s.find(value);//返回对应值为value的迭代器
    s.size();//获得vector中元素个数
    s.erase(it);//删去迭代器为it的元素
    s.erase(value);//删去值为value的元素
    s.erase(first,last);//删去区间[first,last)内的所有元素
    s.clear();//清空容器s内所有元素 
    s.insert(it,x);//向vector任意迭代器it处插入一个元素x

使用迭代器遍历容器

声明迭代器: set<int>:: iterator it; 

 

以题 指纹锁 为例

题目要求实现三个操作,根据题目要求,存储数据的结构中不能存在重复元素,于是想到使用set容器

代码如下:

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

set<int> s;
int m,k,num;
set<int>:: iterator it;
void add(int num)//添加操作 
{
    it=s.lower_bound(num);//用于在指定区域内查找不小于(大于等于)目标值的第一个元素 
    if(*it-num<=k)//检查num右边临近的数 
    return ;
    it--;//
    if(num-*it<=k)//检查num左边临近的数 
    return ;
    s.insert(num);//符合,插入 
}

void del(int num)//删除操作 
{
    for(it=s.lower_bound(num-k);it!=s.end();)//从第一个符合要求的数,依次删除
    //找到大于等于num-k的第一个数,即是在num-k到num+k区间范围内的第一个数 
    {
        if(*it-num>k)//循环终止条件,区间末尾 
        break;
        int tmp=*it;
        it++;//注意迭代器增加的位置 
        s.erase(tmp);//符合,删除 
    }
}

bool query(int num)
{
    it=s.lower_bound(num);//查找 
    if(*it-num<=k)//num右 
    return true;
    it--;
    if(num-*it<=k)//num左 
    return true;
    return false;
}
int main()
{
    ios::sync_with_stdio(false);//取消cin于stdin的同步 
    cin.tie(NULL);//减少输入耗时 
    s.insert(1e8);//初始化数据,迎合代码要求 
    s.insert(-1e8);
    string op;
    cin>>m>>k;
    while(m--)
    {
        cin>>op>>num;
        if(op=="add")
        {
            add(num);
        }
        else if(op=="del")
        {
            del(num);
        }
        else if(op=="query")
        {
            
            int ans=query(num);
            if(ans)
            printf("Yes\n");
            else
            printf("No\n");    
        }
    }
    return 0;
}

本题代码参考https://blog.csdn.net/weixin_43550608/article/details/107722473

 

指纹锁(STL--set)

标签:目标   初始化   重复元素   同步   ace   bool   fir   tar   printf   

原文地址:https://www.cnblogs.com/theshorekind/p/14399843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!