multiset多重集合容器(常用的使用方法总结)
关于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多重集合容器(常用的使用方法总结)的更多相关文章
- C++STL之multiset多重集合容器
multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...
- multiset多重集合容器
跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_ra ...
- Multiset ------ 多重集合
Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...
- 【STL】 set集合容器常用用法
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...
- multiset基础学习,可以有重复类型的多重集合容器
#include <set> #include <iostream> using namespace std; struct Student { char *name; int ...
- C++STL之set集合容器
set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...
- set集合容器(常用的使用方法总结)
关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...
- multimap多重映照容器(常用的方法总结)
multimap和map的不同之处在于前者允许重复键值的元素出现. /*关于C++STL中mulitmap的学习,与map不同的是,multimap允许插入重复键值的元素*/ #include < ...
- map映照容器(常用的使用方法总结)
map映照容器的数据元素是由一个键值和一个映照数据组成的,键值和映照数据之间具有一一对应的关系.map与set集合容器一样,不允许插入的元素的键值重复. /*关于C++STL中map映照容器的学习,看 ...
随机推荐
- 还原wubutu系统
虚拟机->快照 进行系统还原备份
- XML语法随记
1.特殊字符的转义 & ---- & < ---- < > ---- > " ---- " ' ----- &ap ...
- 关于synchronized和lock 的使用及其在线程间的通信
题目要求:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次 synchronized的使用 import java.util.conc ...
- mssql借助链接服务器进行数据快速迁移
在工作中,遇到了一个任务,需要将A数据库的数据迁移到B数据库,两个数据库的数据结构是一样的.B数据库已经在相当数量的数据了,故而不能通过复制数据库的方式来实现. 旧方法 在对数据迁移的时候,一开始使 ...
- Aggregate类型以及值初始化
引言 在C++中,POD是一个极其重要的概念.要理解POD类型,我们首先需要理解Aggregate类型.下文结合stackoverflow上的高票回答将对Aggregate类型做一个全面的解读. 对于 ...
- WinForm中DataGridView的使用(一) - 基本使用
数据绑定 直接指定源数据(List<T>):this.DataSource = data; 通常也可以直接指定DataTable类型的数据 DataTable dt = new DataT ...
- CE修改器使用教程 [基础篇]
Cheat Engine 是一款内存修改编辑工具 ,它允许你修改你的游戏或软件内存数据,以得到一些其他功能.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能, ...
- Android自定义组合控件详细示例 (附完整源码)
在我们平时的Android开发中,有时候原生的控件无法满足我们的需求,或者经常用到几个控件组合在一起来使用.这个时候,我们就可以根据自己的需求创建自定义的控件了,一般通过继承View或其子类来实现. ...
- iOS-【最新】跳转到 App Store 评分
APP应用内 App Store 跳转评分 NSString *itunesurl = @"itms-apps://itunes.apple.com/cn/app/id你的APPid?mt= ...
- Linux学习系列之一:在centos 7.5上安装nginx 以及简单配置
说到Linux我们都知道那是相当相当得重要得啊,在计算机这个行业,开发运维都是离不开它得.我作为一个准毕业生,智商可能不太够,只能自己笨鸟先飞,自己操作起来咯.俗话说的好,好记性不如难笔头嘛.而且ng ...