//map映照容器是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系
//map映照容器的键值不允许重复 ,比较函数值对元素
//的键值进行比较,元素的各项数据可通过键值检索出来 #include<iostream>
#include<map>
#pragma warning(disable:4786) //强制编译器忽略标记符超长警告
#include<string>
using namespace std;
int main()
{
//定义map对象,当前没有任何元素
map<string,float> m1;
//插入元素,按键值的由小到大放入黑白数中
m1["Jack"]=98.5;
m1["Bomi"]=96.0;
m1["Kate"]=97.5;
//前向遍历元素
map<string,float>::iterator it;
for(it=m1.begin();it!=m1.end();it++)
{
//输出键值与映照数据
cout<<(*it).first<<":"<<(*it).second<<endl;
}
map<int,char> m2;
//插入元素,按键值的由小到大放入黑白树中
m2[]='m';
m2[]='k';
m2[]='x';
m2[]='a';
//删除键值为28的元素
m2.erase();
//前向遍历元素
for(map<int,char>::iterator it=m2.begin();it!=m2.end();it++)
{
//输出键值与映照数据
cout<<(*it).first<<":"<<(*it).second<<endl;
}
//可以使用反向迭代器reverse_iterator反向遍历map映照容器中的数据,需要rbegin()方法和rend()方法指出反向遍历的起始位置和终止位置
for(map<int,char>::reverse_iterator rit=m2.rbegin();rit!=m2.rend();rit++)
{
cout<<(*rit).first<<":"<<(*rit).second<<endl;
}
map<int,char>::iterator fit;
//使用find()方法来搜索某个键值,如果搜到了,返回其迭代器位置,否则,返回end()迭代器位置
fit=m2.find();
if(fit!=m2.end()) //搜索到该值
{
cout<<(*fit).first<<":"<<(*fit).second<<endl;
}
else
{
cout<<"not found it"<<endl;
}
//自定义比较函数myComp
/*struct myComp
{
bool operator()(const int &a,const int &b)
{
if(a!=b) return a>b;
else
return a>b;
}
};
map<int,char,myComp> m3;
//插入元素,按键值的由大到小放入黑白树中
m3[25]='m';
m3[28]='k';
m3[10]='x';
m3[30]='a';
//使用前向迭代器中序遍历map
for(map<int,char,myComp>::iterator it1=m3.begin();it1!=m3.end();it1++);
{
cout<<(*it1).first<<":"<<(*it1).second<<endl;
} */
//元素是结构体,可以直接把比较函数写在结构体内
/*struct Info
{
string name;
float score;
//重载"<"操作符,按score由大到小
bool operator<(const Info &a) const
{
return a.score<score;
}
};
map<Info,int> m4;
//定义结构体变量
Info info;
info.name="Jack";
info.score=60;
m[info]=25;
info.name="Bomi";
info.score=80;
m[info]=10;
info.name="Peti";
info.score=66.5;
m[info]=30;
map<Info,int>::iterator it2;
for(it2=m4.begin();it2!=m4.end();it2++)
{
cout<<(*it2).second<<":";
cout<<((*it2).first).name<<((*it2).first.score<<endl;
}*/
//用map实现数字分离采用取余方法操作耗时,把数字当字符串使用 map映照功能很方便实现了数字分离
map<char,int> m5;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
m5['']=;
/*上面的10条赋值语句也可采用下面这个循环来简化代码编写
for(int j=0;j<10;j++)
{
m['0'+j]=j;
}*/
string sa,sb;
sa="";
int i;
int sum=;
for(i=;i<sa.length();i++)
{
sum+=m5[sa[i]];
}
cout<<"sum="<<sum<<endl;
//数字映照字符的map写法
map<int,char> m6;
for(int j=;j<;j++)
{
m6[j]=''+j;
}
int n=;
string s="The number is ";
cout<<s+m6[n]<<endl;
return ;
}

map映照容器的更多相关文章

  1. C++ map 映照容器

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

  2. map映照容器的使用

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

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

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

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

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

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

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

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

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

  7. map映照容器(常用的使用方法总结)

    map映照容器的数据元素是由一个键值和一个映照数据组成的,键值和映照数据之间具有一一对应的关系.map与set集合容器一样,不允许插入的元素的键值重复. /*关于C++STL中map映照容器的学习,看 ...

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

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

  9. multimap多重映照容器(常用的方法总结)

    multimap和map的不同之处在于前者允许重复键值的元素出现. /*关于C++STL中mulitmap的学习,与map不同的是,multimap允许插入重复键值的元素*/ #include < ...

随机推荐

  1. Oracle循环

    --无条件循环 declare v_num ; begin loop dbms_output.put_line(v_num); v_num:; ; end loop; end; --有条件循环 dec ...

  2. bootstrap模态框关闭后清除模态框的数据

    https://segmentfault.com/q/1010000008789123 bootstrap模态框第二次打开时如何清除之前的数据? 我用了bootstrap模态框的remote功能,在弹 ...

  3. 爬虫 之Requests库的详细使用

    1.什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约我 ...

  4. linux之硬盘管理fdisk

    1.首先我们用虚拟机模拟服务器加入一块新的硬盘,硬盘容量入下图5GB硬盘. 2.首先我们要对它进行分区,我们从上面知道需要分区格式化的是第二块硬盘. 3.输入n回车是新建分区,p是主分区(只能建立4个 ...

  5. Object.defineProperties()与Proxy对象代理

    Object.defineProperties() 了不起啊..vue.js通过它实现双向绑定的 Object.defineProperties(obj,props) 方法直接在一个对象上定义新的属性 ...

  6. linux不同终端的操作是如何在messages日志中区分的

    今天在定位一个问题时,查看message日志,需要知道message日志中的记录分别是哪个Xterm终端操作的.比较了半天才发现原来日志中可以通过pts来进行区分.如下所示: --12T15:::|n ...

  7. KVM+QEMU虚拟化概念

    概念: KVM,即Kernel-basedvirtual machine,由redhat开发,是一种开源.免费的虚拟化技术.对企业来说,是一种可选的虚拟化解决方案. 定义:基于Linux内核的虚拟机 ...

  8. 集合之HashMap(含JDK1.8源码分析)

    一.前言 之前的List,讲了ArrayList.LinkedList,反映的是两种思想: (1)ArrayList以数组形式实现,顺序插入.查找快,插入.删除较慢 (2)LinkedList以链表形 ...

  9. 个人用的感觉比较舒服的 idea 插件,不定时更新

    1.mybatis plugin 用的最舒服的 idea 上的 plugin 之一,快速跳转 dao 的映射的 xml 文件,生成配置文件.语法提示等 不过这个收费,,具体步骤百度吧 2.Rainbo ...

  10. C-Lodop提示“有窗口已打开,先关闭它(持续如此请刷新页面)!”

    c-lodop显示“有窗口已打开,先关闭它(持续如此时请刷新页面)!”如果连续执行多个预览语句等导致的,可以预先判断一下,并可以自定义修改窗口已打开的提示,该默认提示的位置如本博客的下图http:// ...