C++set 和 multiset的使用
最后一个自由支配的暑假,学一些自己感兴趣的部分,也算为大三作准备。
C++中set集合的使用
定义一个int类型的集合
set<int> s;
set<int>::iterator it;
基本操作有如下:
s.inert(10);//插入元素10
s.erase(10);//删除元素10
s.clear();//清空集合
s.size();//集合元素的个数
s.empty();//判断集合是否为空
it=s.find(10);//查找集合中是否有元素10,有的话返回10,没有返回s.end();
首先集合在数学的概念中就是互异性,不能有重复
需要注意的点:
1.是以中序遍历去遍历整个集合的,在插入的时候自动调整
2.遍历的时候需要判断一下集合是否为空;
3.插入的数默认从小到大排序 set<int>::iterator it;
4.如果要从大到小的话 set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
{
cout<<*rit<<" ";
}
自定义比较函数,用到结构体
#include<set>
#include<string>
#include<iostream>
using namespace std;
struct Info
{
string name;
float score;
//重载 '<'操作符
bool operator < (const Info &a)const
{
//按照score从小到大排序 换为‘<’则为从大到小
return a.score>score;
}
};
int main()
{
set<Info> s;
Info info;
info.name="Jack";
info.score=;
s.insert(info);
info.name="Tom";
info.score=;
s.insert(info);
info.name="Nacy";
info.score=;
s.insert(info);
info.name="Elano";
info.score=;
s.insert(info);
set<Info>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<(*it).name<<" : "<<(*it).score<<endl;
return ;
}
结果:
mutiset:多重集合 和set最大的区别就是,它可以插入重复的元素,
如果删除的话,相同的也一起删除了;
如果查找的话,返回该元素的迭代器的位置,若有相同,返回第一个元素的地址;
其他使用和set基本类似。
#include<set>
#include<string>
#include<iostream>
using namespace std;
int main()
{
//多重集合对象
multiset<string> ms;
ms.insert("abc");
ms.insert("");
ms.insert("") ;
ms.insert("aaa");
ms.insert("");
ms.insert("bbb"); multiset<string>::iterator it;
for(it=ms.begin();it!=ms.end();it++)
{
cout<<*it<<endl;
}
cout<<endl<<"集合的大小:"<<ms.size()<<endl; it=ms.find("");
if(it!=ms.end())
{
cout<<*it<<endl;
}
else cout<<"not found"<<endl; it=ms.find("");
if(it!=ms.end())
{
cout<<*it<<endl;
}
else cout<<"not found"<<endl; int n=ms.erase("");
cout<<"共删除:"<<n<<endl<<endl;
for(it=ms.begin();it!=ms.end();it++)
{
cout<<*it<<endl;
}
return ;
}

C++set 和 multiset的使用的更多相关文章
- C++ std::multiset
std::multiset template < class T, // multiset::key_type/value_type class Compare = less<T>, ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
- [Google Guava]学习--新集合类型Multiset
Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...
- UVA11136Hoax or what( multiset的应用)
题目链接 题意:n天,每天往一个箱子里放m个数,放完之后取最大的Max和最小的min做差,并把这两个数去掉,求n天之后的和 multiset 和 set的原理是相似的,multiset可以存多个相同的 ...
- 4.2 set和multiset
使用必须包含头文件set 1)multiset *:定义 如果不给第二个参数,默认less<key>,即用<来进行. 例如: A是一个类的名字,则可以定义一个容器对象如下: mult ...
- STL(multiset) UVA 11020 Efficient Solutions
题目传送门 题意:训练指南P228 分析:照着书上的做法,把点插入后把它后面不占优势的点删除,S.size ()就是优势的人数,时间复杂度O (nlogn) #include <bits/std ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)
D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...
- STL中的set/multiset小结
(1)使用set/multiset之前必须包含头文件<set>:#include<set> (2)namespace std{ template <class T, cl ...
- STL--集和多集(set/multiset)
与基本容器相比,关联容器更注重快速和高效地检索数据的能力.这些容器是根据键值(key)来检索数据的,键可以是值也可以是容器中的某一成员.这一类中的成员在初始化后都是按一定顺序排好序的. 本文地址:ht ...
- C++ Set & MultiSet
转自http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍集合(Set)是一种包含已排序对象的关联容器 ...
随机推荐
- poj 2828--Buy Tickets(线段树)
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
- 自定义Hive UDAF 实现相邻去重
内置的两个聚合函数(UDAF) collect_list():多行字符串拼接为一行collect_set():多行字符串拼接为一行并去重多行字符串拼接为一行并相邻去重UDAF:Concat() con ...
- Linux_Day001-002章常用命令
Linux操作系统的组成 以下符号的意义. 输出重定向和输入重定向的知识点 echo 把后面的文字显示出来 xargs 分组, -n 分为n组 xargs -n 1.txt (完整命令:xargs ...
- .NET Core 微信小程序退款——(统一退款)
继上一篇".NET Core 微信小程序支付——(统一下单)后",本文将实现统一退款功能,能支付就应该能退款嘛,一般涉及到钱的东西都会比较敏感,所以在设计退款流程时一定要严谨,不能 ...
- JSP中的两种跳转方式分别是什么,有什么区别?
forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect("跳转页面地址 ...
- Appium+python自动化(三十七)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 下(超详解)
简介 接着上一篇继续看一下如何并发测试以及并发测试的过程中,可能遇到的问题,在这里宏哥把宏哥遇到的和小伙伴或者童鞋们,一起分享一下. Appium端口检测 问题思考 经过前面学习,我们已经能够使用py ...
- (一)ArrayList集合源码解析
一.ArrayList的集合特点 问题 结 论 ArrayList是否允许空 允许 ArrayList是否允许重复数据 允许 ArrayList是否有序 有序 ArrayList是否线程安全 ...
- 解决SSM框架中,存储到mysql数据库中乱码问题的究极方案
因为编码格式不匹配的问题,设置了好多遍,都不行,就试着让所有的编码格式保持一致.然后读取.插入数据库再也不乱码了. 数据库编码格式必须和myeclipse编码格式一致 其次依次让以下各文件的编码格式保 ...
- WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- chrome,firefox浏览器字体发虚解决办法
打开微软自家的edge浏览器,字体就没有问题,刚开始以为是浏览器的问题,调整半天也没有效果,后来怀疑是Windows系统的问题,于是尝试调整字体,成功解决! 解决方案: 进入个性化->字体-&g ...