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. firefox浏览器testclient测试接口

  2. 3.怎样将ASP.NET MVC应用程序发布到IIS

    这一篇,教大家怎么将ASP.NET MVC应用程序发布到本地或者IIS中.打开上一篇创建的ASP.NET MVC 5.0应用程序.[PS:上一篇--->2.第一个ASP.NET MVC 5.0应 ...

  3. AEAI DP创建弹窗

    1 背景概述 在平时我们浏览页面时,经常会看见这样的应用情景,点击某个按钮或点击某个页面区域时,会弹出一个浮动窗口,像这类的功能,在一些开发的项目中很常见,笔者发现使用AEAI DP应用开发平台可以很 ...

  4. springboot2 生产部署注意事项【持续更新】

    注意事项1. 去除不需要的 jar 开发工具 jar :springs-boot-devtools2. 监控一定要做好权限制或者去除 控制 jar :spring-boot-starter-actua ...

  5. 利用koa打造jsonp API

    概述 最近学习利用koa搭建API接口,小有所得,现在记录下来,供以后开发时参考,相信对其他人也有用. 就目前我所知道的而言,API有2种,一种是jsonp这种API,前端通过ajax来进行跨域请求获 ...

  6. 【AWK】:常用总结

    单机文本数据处理,常用AWK,总结一下AWK最常用的要点,备忘备查. 1.What is AWK(1)Aho.Weinberger.Kernighan三位发明者名字首字母:(2)一个行文本处理工具: ...

  7. linux定时重启tomcat服务的脚本学习

    要求:在linux中定时重启一个tomcat服务 一:shell脚本即Shell Script [1],Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便 ...

  8. jvm垃圾回收的过程

    垃圾回收的过程分为两步: 1.判断对象是否死亡 (1)引用计数器法: ①每当有一个对象引用是,计数器加一,当计数器为0是对象死亡 ②缺点:无法解决循环引用的问题,假设A引用B,B引用A,那么这两个对象 ...

  9. 【xsy2818】 最近点 动态树分治+可持久化线段树

    题目大意:给你一颗n个节点的树,最初点集S为空. 有m次操作:往当前点集S中加入/删除一个点,询问点x至集合S中任意点的最小距离,回到第t次修改点集的操作后的状态. 数据范围:$n,m≤10^5$ 我 ...

  10. 11-02 Java Object类使用详解

     Object 作为超类 Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类. Object类的构造方法有一个,并且是无参构造,这其实就是理解当时我们说过,子类构造方法默认访 ...