c++ stack用法详解

c++ set用法详解

  • set
  • set常用操作
  • set单元素应用
  • set多元素应用(结构体)
  • 例题

set

set就是集合,STL的set用二叉树实现,集合中的每个元素只出现一次(参照数学中集合的互斥性),并且是排好序的(默认按键值升序排列)

访问元素的时间复杂度是O(log⁡2n)O(\log_2n)O(log2​n)

在c++中,set的头文件是#include<set>

set具有迭代器set<int>::iterator i 定义一个迭代器,名为i 可以把迭代器理解为C语言的指针

set常用操作

set<int> q;     //以int型为例 默认按键值升序
set<int,greater<int>> p;  //降序排列
int x;
q.insert(x);    //将x插入q中
q.erase(x);     //删除q中的x元素,返回0或1,0表示set中不存在x
q.clear();      //清空q
q.empty();      //判断q是否为空,若是返回1,否则返回0
q.size();       //返回q中元素的个数
q.find(x);      //在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素
q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素q.rend();         //返回第一个元素的的前一个元素迭代器
q.begin();        //返回指向q中第一个元素的迭代器q.end();      //返回指向q最后一个元素下一个位置的迭代器
q.rbegin();      //返回最后一个元素

set单元素应用

#include<iostream>
#include<set>
using namespace std;
int main()
{set<int> q;   //默认按升序排列 q.insert(5);q.insert(5);q.insert(5);cout<<"q.size "<<q.size()<<endl;   //输出 1 ,在set插入中相同元素只会存在一个q.clear(); //清空setcout<<"q.size "<<q.size()<<"\n\n";q.insert(4);q.insert(4);q.insert(3);q.insert(3); q.insert(2);q.insert(1);cout<<"lower_bound "<<*q.lower_bound(3)<<endl;  //返回3 cout<<"upper_bound "<<*q.upper_bound(3)<<"\n\n";  //返回4 set<int>::iterator i;for( i=q.begin();i!=q.end();i++)   //set的遍历 cout<<*i<<" ";                  //输出1 2 3 4,可见自动按键值排序 cout<<endl;q.erase(4);  //删除q中的 4 for(i=q.begin();i!=q.end();i++)  //再次遍历set 只输出 1 2 3 cout<<*i<<" ";cout<<"\n\n"; set<int,greater<int>> p;  //降序排列 p.insert(1);p.insert(2);p.insert(3);p.insert(4);p.insert(5);for(i=p.begin();i!=p.end();i++)cout<<*i<<" ";cout<<endl;return 0;
}

set多元素应用(结构体)

#include<iostream>
#include<set>
using namespace std;
struct node{int a,b;bool operator< (const node W)const{return a>W.a;  //按a的值升序 }
}t;
int main()
{set<node> q;t.a=1;t.b=2;q.insert(t);t.a=4;t.b=2;q.insert(t);t.a=3;t.b=5;q.insert(t);   set<node>::iterator i;for(i=q.begin();i!=q.end();i++){t=*i;cout<<t.a<<" "<<t.b<<endl;}return 0;
}

例题

题目:HDU - 2094 产生冠军

代码:

#include<iostream>
#include<set>
using namespace std;
int main()
{int n;string a,b;while(cin>>n && n){set<string> A,B;for(int i=0;i<n;i++){cin>>a>>b;A.insert(a);A.insert(b);B.insert(b);}if(A.size()-B.size()==1)cout<<"Yes\n";elsecout<<"No\n";}return 0;
}

c++ stack用法详解

c++ set用法详解相关推荐

  1. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  2. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  5. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  6. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

  7. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  8. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  9. WinDbg用法详解

    WinDbg用法详解 对WinDbg的方方面面作了详细的讲解. 转载于:https://blog.51cto.com/laokaddk/125111

  10. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

最新文章

  1. Java 自动装箱性能
  2. 路由(二)——动态路由简介与RIP协议
  3. 如何通过 Excel import 的方式导入测试数据到 SAP Commerce Cloud 服务器
  4. lua windows下编译
  5. Taro+react开发(97):问答模块04
  6. 《性能测试从零开始--LoadRunner入门》读书笔记(四)
  7. 还在4S店买车?《Boss1+1》张朝阳对话贾鸣镝“种草”购车新方式
  8. python常用代码大全-Python常用库大全及简要说明
  9. Linux-软件包管理-rpm命令管理-安装-卸载
  10. js实现轮播图点击按钮切换下一张图片
  11. 商务与经济统计 第三章案例
  12. matlab 拟合优度检验,χ~2拟合优度检验在教学中的应用及Matlab实现
  13. 流媒体服务器- Wowza安装
  14. nadcházející basketbalové boty velkoobchodní další
  15. 开启安卓虚拟机后一直停在控制台页面_金九银十要来了?不要慌,这些安卓 BAT高级面试题刷一刷...
  16. 两步彻底关闭Windows默认共享文件夹(含IPC$)
  17. android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框
  18. 种子的“选择”可影响地区生物多样性
  19. android拷机工具,Android 3DMark大更新:无敌拷机神器
  20. android波浪动画简书,Android贝塞尔曲线————波浪效果(大波浪)

热门文章

  1. Inverting Visual Representations with Convolutional Networks论文理解
  2. 微信小程序路线规划导航,选择起点和终点路线规划
  3. 短信API接口demo示例-C#/Message/Send
  4. 千古第一文人苏轼的众CP
  5. 【手写源码-设计模式17】-迭代器模式-基于客户与商品数据遍历
  6. 【深度学习+组合优化】深度学习和强化学习在组合优化方面有哪些应用?
  7. 从APP测试角度看新增长应用类型如何取得优势
  8. 计算机键盘重复设置,教你操作win10系统电脑键盘打字时总是出现重复字符的方案...
  9. JavaScriptTypeScript学习总结
  10. JavaScript学习简单总结