最后一个自由支配的暑假,学一些自己感兴趣的部分,也算为大三作准备。

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的使用的更多相关文章

  1. C++ std::multiset

    std::multiset template < class T, // multiset::key_type/value_type class Compare = less<T>, ...

  2. Guava学习笔记:Guava新增集合类型-Multiset

    Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...

  3. [Google Guava]学习--新集合类型Multiset

    Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...

  4. UVA11136Hoax or what( multiset的应用)

    题目链接 题意:n天,每天往一个箱子里放m个数,放完之后取最大的Max和最小的min做差,并把这两个数去掉,求n天之后的和 multiset 和 set的原理是相似的,multiset可以存多个相同的 ...

  5. 4.2 set和multiset

    使用必须包含头文件set 1)multiset *:定义 如果不给第二个参数,默认less<key>,即用<来进行. 例如: A是一个类的名字,则可以定义一个容器对象如下: mult ...

  6. STL(multiset) UVA 11020 Efficient Solutions

    题目传送门 题意:训练指南P228 分析:照着书上的做法,把点插入后把它后面不占优势的点删除,S.size ()就是优势的人数,时间复杂度O (nlogn) #include <bits/std ...

  7. 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 ...

  8. STL中的set/multiset小结

    (1)使用set/multiset之前必须包含头文件<set>:#include<set> (2)namespace std{ template <class T, cl ...

  9. STL--集和多集(set/multiset)

    与基本容器相比,关联容器更注重快速和高效地检索数据的能力.这些容器是根据键值(key)来检索数据的,键可以是值也可以是容器中的某一成员.这一类中的成员在初始化后都是按一定顺序排好序的. 本文地址:ht ...

  10. C++ Set & MultiSet

    转自http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍集合(Set)是一种包含已排序对象的关联容器 ...

随机推荐

  1. CF - 1110F Nearest Leaf

    题目传送门 题解: 先用题目给定的dfs方式得到dfs序,记录下出入的dfs序. 很明显可以得知的是,以u为根的子树的dfs序在 in[u] - out[u] 的范围之内. 将每个询问先全部存到对应的 ...

  2. Gym 101964 题解

    B:Broken Watch (别问,问就是队友写的) 代码: import java.awt.List; import java.io.BufferedInputStream; import jav ...

  3. codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)

    题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...

  4. poj 2912 Rochambeau(枚举+带权并查集)

    题目链接:http://poj.org/problem?id=2912 题意:多个人玩石头剪刀布分成3组和一个裁判,每一组提前选定了自己出哪个手势,裁判可以随意出什么手势,问是否能够从给出的一系列石头 ...

  5. CSU 1803 2016 湖南省2016省赛

    1803: 2016 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 1416    ...

  6. 从一道看似简单的面试题重新理解JS执行机制与定时器

     壹 ❀ 引 最近在看前端进阶的系列专栏,碰巧看到了几篇关于JS事件执行机制的面试文章,因为我在之前一篇 JS执行机制详解,定时器时间间隔的真正含义 博文中也有记录JS执行机制,所以正好用于作为测试自 ...

  7. 工作中遇到的99%SQL优化,这里都能给你解决方案(二)

    -- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL ...

  8. HTML+CSS+JavaScript实现2048小游戏

    相信很多人都玩过2048小游戏,规则易懂.操作简单,我曾经也“痴迷”于它,不到2048不罢休,最高成绩合成了4096,现在正好拿它来练练手. 我对于2048的实现,除了使用了现有2048小游戏的配色, ...

  9. 史上最全Docker环境安装指南-让安装docker简单到爆

    一.思考❓❔ 1.什么是Docker? 装应用的容器 开发.测试.运维都偏爱的容器化技术 轻量级 扩展性 一次构建.多次分享.随处运行 2.安装Docker难不难? So easy! 此文看过之后,读 ...

  10. .Net基础篇_学习笔记_第五天_流程控制while循环

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...