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. nginx 执行理解

    nginx是一个代理(apache)或者自己处理 location ~ \.php { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock ...

  2. 如何利用JUnit开展一个简单的单元测试(测试控制台输出是否正确)

    待测类(CreateString)如下: public class CreateString { public void createString() { //Output the following ...

  3. openstack手动安装

    安装文档: https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/openstack-iceho ...

  4. C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明

    这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用. 项目源码下载地址 https://gitee.com/whuanle/xkgl 笔者录了两个视频,打开项目源 ...

  5. UWP 大爆炸你个锤子

    今天看到  叫我蓝火火 s的 UWP中实现大爆炸效果(一) ,我也来说一下我的app [小薇自然语言处理]实现的大爆炸技术. 看一下效果先. 我的控件是基于wrappanel的,正如蓝火火说的,这样看 ...

  6. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

  7. Linux系统软件包的管理(4)

    虽然使用源码编译安装可以具有提高速度个性化的定制等优点,但对于 Linux发行商来说,则不容易管理软件包,毕竟不是每个人都会进行源码编译的,如果能够将软件预先在相同的硬体与系统上面编译好在发布的话,不 ...

  8. python 通过pytz模块进行时区的转换,获取指定时区的时间

    import pytz import time import datetime print(pytz.country_timezones('cn')) # 查询中国所拥有的时区 print(pytz. ...

  9. kafka java.rmi.server.ExportException: Port already in use

    当你在kafka-run-class.sh中添加了export JMX_PORT=9300 开启了 jmx 后, 在使用 kafka bin/目录下的脚本时会报如下错误: java.rmi.serve ...

  10. [Element-UI] 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined

    使用Element-UI组件的DateTimePicker,如下: <template> <div class="block"> <span clas ...