map映照容器的数据元素是由一个键值和一个映照数据组成的,键值和映照数据之间具有一一对应的关系。map与
set集合容器一样,不允许插入的元素的键值重复。

/*关于C++STL中map映照容器的学习,看别人的代码一百遍,不如自己动手写一遍。*/
#include <map>
#include <string>
#include <iostream>
using namespace std; struct myComp{
bool operator () (const int &a,const int &b){
return a>b;
}
}; struct STUDENT{
string name;
float score; //重载“<”操作符,自定义排序规则
bool operator < (const STUDENT &a) const{
//按照score由大到小排列。从小到大,则使用>号
return a.score<score;
}
}; void print(map<string,float> m);
void rprint(map<string,float> m); int main()
{
//map映照容器的创建
map<string,float> m;//定义map对象,<>中前面是键值后面是映照数据,当前没有任何元素
//插入元素,按键值的由小到大放入黑白树中
m["Jack"]=98.5;
m["Bomi"]=96.0;
m["Kate"]=97.5; //前向遍历元素
cout<<"前向遍历元素:\n";
print(m);
//反向遍历元素
cout<<"后向遍历元素:\n";
rprint(m);
/*运行结果
前向遍历元素:
Bomi:96
Jack:98.5
Kate:97.5
后向遍历元素:
Kate:97.5
Jack:98.5
Bomi:96
*/ //元素的检索
map<string,float>:: iterator it1;//定义一个同类型的迭代器来接受find()方法的返回值
it1=m.find("Jack");
if(it1 != m.end()) cout<<"找到键值为Jack的元素\n";
it1=m.find("Mark");
if(it1 == m.end()) cout<<"找不到键值为Mark的元素\n";
/*运行结果
找到键值为Jack的元素
找不到键值为Mark的元素
*/ //按照键值删除某一个等于该键值的元素
cout<<"删除键值为Bomi的元素\n";
m.erase("Bomi");
print(m);
/*运行结果
删除键值为Bomi的元素
Jack:98.5
Kate:97.5
*/ //清空map映照容器
m.clear();
if(m.empty()) cout<<"该映照容器为空\n";
/*运行结果
该映照容器为空
*/ /*同set一样,在使用insert()方法将元素插入到映照容器中的时候,会根据设定的比较规则进行排序,默认情况下
按键值从小到大的顺序插入,但很多情况下,需要自己编写比较函数*/ //如果不是结构体,则直接定义比较函数,重载"()"运算符,见main函数之前
map<int,char,myComp> mm;//使用自定义比较函数的时候记得在这进<>中
mm[]='m';
mm[]='k';
mm[]='x';
mm[]='a'; map<int,char>::iterator it2;
for(it2=mm.begin(); it2 != mm.end(); it2 ++){
cout<<(*it2).first<<":"<<(*it2).second<<endl;
}
/*运行结果
30:a
28:k
25:m
10:x
*/ //如果是结构体,则直接把比较函数写在结构体内,见main函数之前
STUDENT student;
map<STUDENT,int> students;
student.name="Jack";
student.score=;
students[student]=; student.name="Bimi";
student.score=;
students[student]=; student.name="Peti";
student.score=;
students[student]=; map<STUDENT,int>::iterator it3;//定义相应类型的迭代器遍历映照容器
for(it3=students.begin(); it3 != students.end(); it3 ++){
cout<<((*it3).first).name<<" "<<((*it3).first).score<<" : "<<(*it3).second<<endl;
}
/*运行结果
Bimi 80 : 10
Peti 66 : 30
Jack 60 : 25
*/
return ;
} void print(map<string,float> m)
{
map<string,float>::iterator it;
for(it=m.begin(); it != m.end(); it++){
cout<<(*it).first<<":"<<(*it).second<<endl;
}
} void rprint(map<string,float> m)
{
map<string,float>::reverse_iterator rit;
for(rit=m.rbegin(); rit != m.rend();rit++){
cout<<(*rit).first<<":"<<(*rit).second<<endl;
}
}

map映照容器(常用的使用方法总结)的更多相关文章

  1. C++ map 映照容器

    map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较, ...

  2. map映照容器

    //map映照容器是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系 //map映照容器的键值不允许重复 ,比较函数值对元素 //的键值进行比较,元素的各项数据可通过键值检索出来 ...

  3. 统计频率(map映照容器的使用)

    问题描述  AOA非常喜欢阅读莎士比亚的诗,莎士比亚的诗中有种无形的魅力吸引着他!他认为莎士比亚的诗中之所以些的如此传神,应该是他的构词非常好!所以AOA想知道,在莎士比亚的书中,每个单词出现的频率各 ...

  4. C++STL之map映照容器

    map映照容器 map映照容器的元素数据是由一个键值和一个映照数据组成的, 键值与映照数据之间具有一一映照关系. map映照容器的数据结构也是采用红黑树来实现的, 插入元素的键值不允许重复, 比较函数 ...

  5. map映照容器的使用

    map映照容器可以实现各种不同类型数据的对应关系,有着类似学号表的功能. 今天在做并查集的训练时,就用上了map映照容器. 题目就不上了,直接讲一下用法.顺便说一下,实现过程是在C++的条件下. #i ...

  6. POJ 1002 487-3279(map映照容器的使用)

    Description Businesses like to have memorable telephone numbers. One way to make a telephone number ...

  7. zoj 2104 Let the Balloon Rise(map映照容器的应用)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2104 题目描述: Contest time again! Ho ...

  8. zoj 1109 Language of FatMouse(map映照容器的典型应用)

    题目连接: acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1109 题目描述: We all know that FatMouse doe ...

  9. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

随机推荐

  1. Anroid 手机助手 详细解析 概述(二)

    这篇主要说一下手机插入之后的一些动作. 1)  捕获窗口消息 插入拔出一个USB设备windows 会给所有的窗口发送特定的消息,只要我们捕获这些消息就可以处理设备插入和拔出.需要注意的是插入或者拔出 ...

  2. ElementTriArgyris

    class ElementTriArgyris(ElementH2): nodal_dofs = 6 facet_dofs = 1 dim = 2 maxdeg = 5 def gdof(self, ...

  3. 2.mongodb可视化工具

    (1)去robomongo官方网址下载,官网地址(https://robomongo.org/)选择相应的版本. (2) tar -xzf robo3t-1.2.1-linux-x86_64-3e50 ...

  4. Delphi获取公网IP地址函数

    uses IdHTTP; function GetPublicIP: string; var strIP, URL: string; iStart, iEnd: Integer; MyIdHTTP: ...

  5. .net core 分布式配置中心

    github地址 https://github.com/wangchengqun/ratel 配置文件 数据同步端口 Server: ip: 127.0.0.1 port: 7890 浏览器访问 ht ...

  6. CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接

    需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...

  7. Button去除边框方法

    <Button  Content="Button" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey} ...

  8. [学习笔记]Splay

    其实就是一道题占坑啦 [NOI2005]维护数列 分析: 每次操作都要 \(Splay\) 一下 \(Insert\) 操作:重建一棵平衡树,把 \(l\) 变成根,\(l+2\) 变成右子树的根,那 ...

  9. 暴破助攻提权:ruadmin

    i春秋作家:yangyangwithgnu 1 缘由 千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面.扩大战果,提权,是必经之路 ...

  10. PHP 获取两个时间之间的月份

    ## 获取两个时间之间的间距时间 $s = '2017-02-05'; $e = '2017-07-20'; $start = new \DateTime($s); $end = new \DateT ...