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. [leetcode 120]triangle 空间O(n)算法

    1 题目 Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjac ...

  2. IE兼容性小结(IE7及以上版本)

    缘由 在急速的互联网时代,原本ie系列的低版本浏览器就该淘汰了.可偏偏还是有很多xp系统ie7.8浏览器,这有让网站甚是苦逼.练就了一套新技术,原本以为能大展身手,可却在ie阵容中认怂了,不得不规规矩 ...

  3. Download SQL Server Management Studio (SSMS)下载地址

    Download SQL Server Management Studio (SSMS)下载地址: https://msdn.microsoft.com/en-us/library/mt238290. ...

  4. Android-----application的学习

    一.Application的对象回调函数 1.onCreate : Application对象被创建时候会调用 2.onConfigurationChanged : 屏幕方向变化.系统语言的更改等 3 ...

  5. 网络编程-socket(三)(TCP长连接和UDP短连接、时间服务器)

    详解地址:https://www.cnblogs.com/mys6/p/10587673.html TCP server端 import socketsk = socket.socket() # 创建 ...

  6. mongodb批量更新某个字段

    查询出hospitalName是xx医院和openId以2开头的所有记录,并且更新my_booking表中的payType为1. db.getCollection('my_booking').find ...

  7. SpringBoot入门之内嵌Tomcat配置

    spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / .需要用到的就是端口.上下文路径的修改,在spring boot中其修改方 ...

  8. 【Vue】【Router】手动跳转用 this.$router.push() 时 $router 未定义的问题

    初入Vue,手写路由跳转时的问题: toXxxRoute: () => { this.$router.push({'path': '/xxx', 'name': 'xxx'}) } 由于使用了箭 ...

  9. js获取当前页面相关信息

    1. 获取整个url: console.log(window.location.href)  http://localhost:8082/Index.html?name=tom 2. 获取域名加端口号 ...

  10. day 73 初学vue (1)

    前情提要: vue 框架的初学习, 主要是,指令,属性,函数,计算属性,监听属性,钩子,生命周期,过滤器,阻止事件和综合案例todo list 学习准备,感谢学习资源: vue 官网:https:// ...