C++STL之set用法笔记

一、引言

本人第一次写文章,只是想把这篇文章当做笔记记录,写文章也都是为了做笔记,也没有深入的学过c++,一直学的都是C语言,学习c++只是因为打比赛更方便,只学了一些皮毛,没有深入,目前还在学习阶段,如有错误,欢迎指正!!!

二、c++的特性

  1. 头文件不同,c的头文件在c++中使用需要将原来的.h删除并添加c在开头
  2. gun(g++,gcc)编译器特有 万能头文件<bits/stdc++.h>
  3. 具有命名空间,通常我们无视这个特性,但需要知道c++是具有命名空间的,有的时候取名字会和命名空间的一些名字冲突。using namespace std;
  4. 可以重载操作符号(使用STL必备条件,部分STL库需要先重载<符号,原因是因为STL很多容器是基于xx树实现的,通常基于xx树实现排序。例如map,set,特殊的,sort排序算法本身就需要重载小于号,才知道谁应该排在前面。)

三、关于set

关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动从小到大进行排序。应该注意的是set中数元素的值不能直接被改变。

四、set中最常用的方法

在这里插入图片描述

1、样例示范

  1. 引用insert(num),size(),empty(),being(),end()方法;
#include<bits/stdc++.h>

using namespace std;

int main(){
	int a,i,j,n=4;
	set<int> s;
	
	for(i=0;i<n;i++){
		scanf("%d",&a);
		s.insert(a);
	}
	
	printf("s的大小为:%d\n",s.size());
	printf("s中的第一个元素是:%d\n",*s.begin());
	printf("s中的最后一个元素是:%d\n",*s.end());
	
	s.clear();
	if(s.empty()){
		printf("s已清空!\n"); 
	} 
	printf("清空后s的大小为:%d\n",s.size());
	
}

运行结果:
在这里插入图片描述

2.erase(iterator) ,删除定位器iterator指向的值

erase(first,second),删除定位器first和second之间的值

erase(key_value),删除键值key_value的值
本段还示范了set的遍历

#include<bits/stdc++.h>
  
using namespace std;
  
int main()
  {
     set<int> s;
     set<int>::iterator iter;
     set<int>::iterator first;
     set<int>::iterator second;
     for(int i = 1 ; i <= 10 ; ++i)
     {
         s.insert(i);
     }
     
     printf("第一种删除:\n");
     //第一种删除   
	  s.erase(s.begin());
	  printf("删除后 set 中元素是 :");
	  for(iter = s.begin() ; iter != s.end() ; ++iter)
         printf("%d ",*iter);
         printf("\n"); 
    
    printf("第二种删除:\n"); 
     //第二种删除
     first = s.begin();
     second = s.begin();
     second++;
     s.erase(first,second);
     printf("删除后 set 中元素是 :");
	 for(iter = s.begin() ; iter != s.end() ; ++iter)
          printf("%d ",*iter);
    printf("\n"); 
    
     printf("第二种删除:\n");
     //第三种删除
     s.erase(7);
     printf("删除后 set 中元素是 :");
	 for(iter = s.begin() ; iter != s.end() ; ++iter)
          printf("%d ",*iter);
     printf("\n"); 
	      
     return 0;
 }

运行结果:
在这里插入图片描述
3.inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.

#include<bits/stdc++.h>
  
using namespace std;  
  
int main()  
{  
    int a[] = {1,2,3,4,5,6};  
    set<int> s;  
    set<int>::iterator iter; 
	 
    s.insert(a,a+3); 
    
    for(iter = s.begin() ; iter != s.end() ; ++iter)   
        printf("%d ",*iter);  
     
   	printf("\n");  
   
    return 0;  
}  

运行结果:在这里插入图片描述
4、find() ,返回给定值值得定位器,如果没找到则返回end()。

#include<bits/stdc++.h>
  
using namespace std;  
  
int main()  
{  
    int a[] = {1,2,3,4,5};  
    set<int> s(a,a+3);  
    set<int>::iterator iter; 
	 
    if((iter = s.find(2)) != s.end())    
       printf("%d\n",*iter);
       
    if((iter = s.find(9)) == s.end())  
       printf("%d",*iter);
     
    return 0;  
} 

运行结果:
在这里插入图片描述
5.lower_bound(key_value) ,返回第一个大于等于key_value的定位器

upper_bound(key_value),返回最后一个大于等于key_value的定位器

#include<bits/stdc++.h>

using namespace std;  
  
int main()  
{  
    set<int> s;  
    int a[]={1,2,3,4,5};
    s.insert(a,a+5);  
	
	printf("%d\n",*s.lower_bound(2));
	printf("%d\n",*s.lower_bound(3));
	printf("%d",*s.upper_bound(3));
 
    return 0;  
}

运行结果:
在这里插入图片描述
本文参考:参考链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值