关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍。
  multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复的元素键值插入。

 #include <set>
#include <string>
#include <iostream>
using namespace std; struct myComp{
bool operator () (const string &a,const string &b){
if(a.compare(b) == )
return ;
return ;
}
}; struct STUDENT{
string name;
double score;
//重载"<"运算符,自定义排列规则
bool operator < (const STUDENT &a) const{
return a.score<score;//由大到小。如果由小到大,则符号为>
}
}; void print(multiset<string> ms);
void rprint(multiset<string> ms); int main()
{
//多重集合的创建与插入
multiset<string> ms;
ms.insert("abc");
ms.insert("");
ms.insert("");
ms.insert("aaa");
ms.insert("");
cout<<"中序正向遍历:\n";
print(ms);
cout<<"中序逆向遍历:\n";
rprint(ms);
/*运行结果
中序正向遍历:
111
123
123
aaa
abc
中序逆向遍历:
abc
aaa
123
123
111
*/ //元素的查找
/*同set集合容器一样,使用find()查找元素,如果找到返回钙元素的迭代器位置(如果该元素存在重复,则返回第
一个重复元素的迭代器位置),否则,返回end()迭代器*/
multiset<string>:: iterator it;
it=ms.find("");
if(it != ms.end()) cout<<"找到键值为123的元素\n";
it=ms.find("");
if(it == ms.end()) cout<<"没有找到键值为456的元素\n";
/*运行结果
找到键值为123的元素
没有找到键值为456的元素
*/ //多重集合元素的删除
cout<<"删除前:\n";
print(ms);
int n=ms.erase("");//删除键值等于某个值得所有重复元素,并返回删除元素的个数
cout<<"删除了"<<n<<"个元素\n";
cout<<"删除后:\n";
print(ms);
/*运行结果
删除前:
111
123
123
aaa
abc
删除了2个元素
删除后:
111
aaa
abc
*/ ms.clear();
if(ms.empty()) cout<<"清除后为:空\n";
/*运行结果
清除后为:空
*/ /*同样在使用insert()可以采用自定义比较函数,默认从小到大*/
//当元素类型是基本数据类型时,采用在主函数前重载"()"操作符
multiset<string,myComp> mss;
mss.insert("abc");
mss.insert("");
mss.insert("");
mss.insert("aaa");
mss.insert(""); multiset<string>::iterator it1;
for(it1= mss.begin(); it1 != mss.end(); it1 ++){
cout<<*it1<<endl;
}
/*运行结果
abc
aaa
123
123
111
*/ //如果元素是结构体,可以将比较函数写在结构体内,见main函数之前的定义方法
multiset<STUDENT> students;
STUDENT someone;
someone.name="Jack";
someone.score=80.5;
students.insert(someone); someone.name="Tomi";
someone.score=57.5;
students.insert(someone); someone.name="Nacy";
someone.score=60.5;
students.insert(someone); someone.name="Nacy";
someone.score=60.5;
students.insert(someone); multiset<STUDENT>:: iterator it2;
for(it2 = students.begin(); it2 != students.end(); it2 ++){
cout<<(*it2).name<<":"<<(*it2).score<<endl;
}
/*运行结果
Jack:80.5
Nacy:60.5
Nacy:60.5
Tomi:57.5
*/
return ;
} void print(multiset<string> ms)
{
multiset<string>:: iterator it;
for(it=ms.begin(); it != ms.end(); it ++){
cout<<*it<<endl;
}
} void rprint(multiset<string> ms)
{
multiset<string>::reverse_iterator rit;
for(rit=ms.rbegin(); rit != ms.rend(); rit++){
cout<<*rit<<endl;
}
}

multiset多重集合容器(常用的使用方法总结)的更多相关文章

  1. C++STL之multiset多重集合容器

    multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...

  2. multiset多重集合容器

    跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_ra ...

  3. Multiset ------ 多重集合

    Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...

  4. 【STL】 set集合容器常用用法

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...

  5. multiset基础学习,可以有重复类型的多重集合容器

    #include <set> #include <iostream> using namespace std; struct Student { char *name; int ...

  6. C++STL之set集合容器

    set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...

  7. set集合容器(常用的使用方法总结)

     关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...

  8. multimap多重映照容器(常用的方法总结)

    multimap和map的不同之处在于前者允许重复键值的元素出现. /*关于C++STL中mulitmap的学习,与map不同的是,multimap允许插入重复键值的元素*/ #include < ...

  9. map映照容器(常用的使用方法总结)

    map映照容器的数据元素是由一个键值和一个映照数据组成的,键值和映照数据之间具有一一对应的关系.map与set集合容器一样,不允许插入的元素的键值重复. /*关于C++STL中map映照容器的学习,看 ...

随机推荐

  1. bootstrap2.2相关文档

    本节课我们主要学习一下 Bootstrap表单和图片功能,通过内置的 CSS定义,显示各种丰富的效果. 一.表单 Bootstrap提供了一些丰富的表单样式供开发者使用. 1.基本格式 //实现基本的 ...

  2. LDO-AMS1117

    AMS1117 1.是AMS艾默森公司简称.与AMS1117对应的IC有LM1117.AMS1117的最大输入电压为15V,而LM1117的极限是20V. 2.其输出电压有固定式(1.5V,1.8V, ...

  3. ORACLE EBS常用表

    http://www.cnblogs.com/quanweiru/archive/2012/09/26/2704628.html call fnd_global.APPS_INITIALIZE(131 ...

  4. 三、Kubernetes之深入了解Pod

      1.yaml格式的Pod配置文件内容及注解 深入Pod之前,首先我们来了解下Pod的yaml整体文件内容及功能注解. 如下: # yaml格式的pod定义文件完整内容: apiVersion: v ...

  5. WinForm POST上传与后台接收

    前端 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using ...

  6. Fiddler工具使用介绍三

    我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改 ...

  7. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  8. [NOIP2018]赛道修建(二分+multiset)

    考场上打了一个 \(vector\) 解法,因为我当时不会 \(multiset\) 好吧,我来讲一讲今年的 \(tgD1T3\) 首先,这题 \(55\) 分是不难想的 1. \(b_i=a_i+1 ...

  9. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  10. WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探

    Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事, ...