• set集合容器底层由红黑树实现,是平衡二叉搜索树。
  • 相对stl中的list、deque效率更高。
  • 注意:由于集合 的 性质,单纯的 set 不允许重复的元素
  • 初始化 / 清空 函数 : clear()
  • 插入 / 添加 函数:insert(x) (插入键值x到集合中)
  • 插入 / 添加 函数:insert(iterator,iterator) (插入迭代器之间的元素到集合中)
  • 检索 / 查找 函数:find(x) (查找键值为x的元素,若存在,则返回键值的迭代器位置,否则返回集合最后一个元素的下一个位置)
  • 删除 函数:erase(x) (删除键值为x的元素)
  • 删除 函数:erase(iterator) (删除迭代器位置的元素)
  • 删除 函数:erase(iterator,iterator) (删除迭代器之间的值)
  • 累计 函数:count(x)(用来查找集合中某个元素是否出现过,只返回1或0)
  • 类似二分查找 函数:equal_range(x)(返回第一个大于或等于键值的迭代器 和 第一个大于键值的迭代器)
#include <set>
#include <iterator>
#include <iostream>
#include <algorithm> using namespace std; typedef set<int> S;
S s;
int n; int main()
{
cin>> n;
for( int i = 0 ; i < n ; i++ ){
int x;
cin>> x;
s.insert( x );
}
pair< S::const_iterator,S::const_iterator > pr;
int y;
cin>> y;
pr = s.equal_range( y );
cout<< *pr.first << *pr.second <<endl;
return 0;
}

怎样更加灵活地使用set?

》》》
1.灵活使用关键字排序
※若集合元素不是结构体是单纯的变量类型,用结构体重载()运算符
#include <set>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm> using namespace std; struct cmp{
bool operator () ( const int &a,const int &b ){
return a>b;
}
};
typedef set<int,cmp> S;
int n;
S s; int main()
{
cin>> n;
for( int i = 0 ; i < n ; i++ ){
int x;
cin>> x;
s.insert( x );
}
for( S::iterator i = s.begin() ; i != s.end() ; i++ )
cout<< *i <<endl;
return 0;
}

※若集合元素为结构体,直接在元素结构体内重载 < 运算符即可

2.灵活使用遍历
※顺序遍历,使用iterator直接遍历即可
set<int> s ;
for( set<int>::iterator i = s.begin() ; i != s.end() ; i++ );

※反序遍历,使用reverse_iterator

set<int> s ;
for( set<int>::reverse_iterator i = s.rbegin() ; i != s.rend() ; i++ )
  • set的遍历是高效的中序遍历,也就是说iterator的++和--就可以直接得到其前驱和后继

stl学习(二)集合 set 的使用的更多相关文章

  1. STL学习二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  2. 侯捷STL学习(二)

    第六节:容器之分类和各种测试(四) stack不提供iterator操作,破坏了容器的独特性,先进先出. 使用容器multiset(允许元素重复) 内部是红黑树,insert操作就保证了排好了序. 标 ...

  3. 侯捷STL学习(二)--序列容器测试

    第六节:容器之分类和各种测试(四) stack不提供iterator操作,破坏了容器的独特性,先进先出. 使用容器multiset(允许元素重复) 内部是红黑树,insert操作就保证了排好了序. 标 ...

  4. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

  5. ###STL学习--适配器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...

  6. STL学习:STL库vector、string、set、map用法

    本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...

  7. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  8. ###STL学习--vector

    点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...

  9. ###STL学习--迭代器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代 ...

  10. ###STL学习--函数对象

    点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的 ...

随机推荐

  1. 渗透测试常规思路分析-FREEBUF

    最基础但练得好最后也非常厉害 1.  主要由于服务器配置等原因造成的信息泄露 常用google ,bing等搜索工具,轻量级的搜索出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露, ...

  2. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q1-Q3)

    这里我把从网上搜集到的针对Sharepoint 70-576的有关练习进行系统的解析,整理成一个系列, 分期.分批次共享出来,供大家研究. 70-573考试注重的是"知道"相关知识 ...

  3. Jquery导航悬停点击及首页图片切换功能

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx. ...

  4. Android根据字符串加载Activity和图片

    根据传入的字符串跳转Activity Intent intent = new Intent(context,Class.forName("com.packname.Activity" ...

  5. Gradle基础

    什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. Gr ...

  6. 【读书笔记】iOS-程序进入到后台

    当一个iOS应用被送到后台,它的主线程会被暂停.你用NSThread的detachNewThreadSelector:toTar get:withObject:类方法创建的线程也被挂起了.如果你想在后 ...

  7. android 数据存储Ⅱ

    本章继续讲解在Android开发中,数据的存储与管理.涉及知识点:SQLite,SwipeRefreshLayout控件刷新. 1.功能需求 练习使用SQLite 做一个登录界面,数据库字段包含用户名 ...

  8. PHP isset() 检测变量是否设置

    isset() 用于检测变量是否设置. isset() PHP isset() 用于检测一个或多个变量是否设置,如果被检测的变量存在则返回 TRUE,否则返回 FALSE. 语法: 1 bool is ...

  9. Java AIO 异步IO应用实例

    项目地址:https://github.com/windwant/aio-test Server: package org.windwant.aio; import java.io.IOExcepti ...

  10. MYSQL的JOB

    要让JOB顺利运行,必须要打开MYSQL的定时器. -- 查看是否开启定时器 SHOW VARIABLES LIKE '%sche%'; -- 开启定时器 0:off 1:on -- 这个需要最高权限 ...