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. java 注释annotation学习---两篇不错的blog

    深入理解Java:注解(Annotation)自定义注解入门 ---- http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理 ...

  2. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  3. redis -编译、启动、停止

    一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先到这里下载Stable稳定版,目前最新版本是2.8 ...

  4. 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)

    MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中,一切皆路由,url中是完全拒绝"?"和“&”.对此,我 ...

  5. WinForm中DataGridView的使用(一) - 基本使用

    数据绑定 直接指定源数据(List<T>):this.DataSource = data; 通常也可以直接指定DataTable类型的数据 DataTable dt = new DataT ...

  6. 文本框仅可接收decimal

    文本框html如下: <div><label class="label">价格:</label><input id="TextP ...

  7. linux设置静态ip地址

    首先我们使用ifconfig查看网卡配置信息 我们进入需要设置的网卡的配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 我们可以看到默认的配置是d ...

  8. WIN10安装scrapy/channels等不成功的解决方式

    问题 在Win10机器上,不管是安装scrapy还是channels,都需要安装一个包,叫做twisted.正是这个twisted,导致出现一系列的奇葩错误,让我一度以为我的Pycharm坏了,还改了 ...

  9. 从C#到TypeScript - 类型

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  10. 阿里云centos7安装图形界面

    CentOS 7 系统下,本文以 MATE 桌面环境安装进行安装配置说明: 登录服务器,执行如下指令安装桌面环境: # 先安装 MATE Desktop    yum groups install & ...