map映照容器的元素数据包含两个部分:

一个键值;

一个映照的数据;

组成的,键值和映照数据之间具有一一对应的关系。

map映照容器的数据结构也是采用红黑树来实现的,请注意:不允许插入元素的键值相同。比较函数所比较的也只是键值之间的比较,在检索的时候,通俗的说查找的时候,还是通过键值进行查找。

map的用法和set及其相似,如果你之前的都看了,相信你可以猜到map有哪些方法以及操作了

*map创建、元素插入和遍历访问

创建map对象,键值和映照数据的类型自己来定义。在没有指定比较函数的时候,元素的插入位置是按键值的由小到大的顺序进行插入的。

//请注意:程序在编译的时候,会产生代号为warning C4786的警告,4786警告的意思是
//标记符超长警告的代号。可以在程序的头文件中加上#pragma warning(disable:4786)
//宏语句,强制编译器忽略该警告,4786警告对程序的正确性以及程序的正常运行没有影响
#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>using namespace std;int main()
{//定义map对象,当前没有任何元素map<string, float> m;m["CaiCai"] = 98.5;m["Ningbo"] = 96.0;m["Zhejiang"] = 97.5;map<string, float>::iterator it;for(it = m.begin(); it != m.end(); it ++)cout<<(*it).first<<" : "<<(*it).second<<endl;return 0;
}

*删除元素

跟set类似,map映照容器也是通过erase()函数进行元素的删除的。clear()函数也可以使用

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;int main()
{map<int, char> m;//插入元素,按键值由小到大插入到红黑树中m[25] = 'm';m[28] = 'k';m[10] = 'x';m[30] = 'a';//删除键值为28的 m.erase(28); map<int, char>::iterator it;for(it = m.begin(); it != m.end(); it ++)cout<<(*it).first<<" : "<<(*it).second<<endl;return 0;
}

*元素反向遍历、元素的搜素

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;int main()
{map<int, char> m;m[25] = 'm';m[28] = 'k';m[10] = 'x';m[30] = 'a';//反向遍历 map<int, char>::reverse_iterator rit;for(rit = m.rbegin(); rit != m.rend(); rit ++)cout<<(*rit).first<<" : "<<(*rit).second<<endl;//查找键值为28的元素 map<int, char>::iterator it;it = m.find(28);if(it != m.end())cout<<(*it).first<<" : "<<(*it).second<<endl;elsecout<<"Not find it!"<<endl;return 0;}

*自定义比较函数

将元素插入到map中的时候,map会根据指定的比较函数将元素插入到该放的位置上,如果没有指定比较函数,就采用默认的比较函数,按键值从小到大的规则插入。

1. 如果元素不是结构体

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;//自定义比较函数mycmp
struct mycmp
{bool operator () (const int& a, const int& b){if(a != b)return a > b;elsereturn a > b;}
};int main()
{map<int, char, mycmp> m;m[25] = 'm';m[28] = 'k';m[10] = 'x';m[30] = 'a';map<int, char, mycmp>::iterator it;for(it = m.begin(); it != m.end(); it ++)cout<<(*it).first<<" : "<<(*it).second<<endl;return 0;
} 

2. 如果元素是结构体,比较函数直接写在结构体中

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;struct Info
{string name;float score;//按score由大到小的顺序排列, bool operator < (const Info& a) const{return a.score < score;}
};int main()
{map<Info, int> m;    Info info;info.name = "CaiCai";info.score = 60;m[info] = 25;info.name = "Ningbo";info.score = 80;m[info] = 10;info.name = "Zhejiang";info.score = 67;m[info] = 30;map<Info, int>::iterator it;for(it = m.begin(); it != m.end(); it ++){cout<<(*it).second<<" : ";cout<<((*it).first).name<<" "<<((*it).first).score<<endl; }return 0;
} 

* 用map实现数字分离

对数字各位进行分离,把数字当做字符串进行处理,使用map的映照功能,很便捷的对数字进行分离

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;int main()
{map<char, int> m;m['0'] = 0;m['1'] = 1;m['2'] = 2;m['3'] = 3;m['4'] = 4;m['5'] = 5;m['6'] = 6;m['7'] = 7;m['8'] = 8;m['9'] = 9;for(int i = 0; i < 10; i ++)m['0'+i] = i;string sa, sb;sa = "2015";int sum = 0;for(int i = 0; i < sa.length(); i ++)sum += m[sa[i]];cout<<"sum = "<<sum<<endl;return 0;
}

*数字映照字符的map写法

很多时候,需要实现将数字映射为相应的字符

#pragma warning(disable:4786)
#include<iostream>
#include<map>
#include<string>
using namespace std;int main()
{map<int, char> m;m[0] = '0';m[1] = '1';m[2] = '2';m[3] = '3';m[4] = '4';m[5] = '5';m[6] = '6';m[7] = '7';m[8] = '8';m[9] = '9';for(int i = 0; i < 10; i ++)m['0'+i] = i;int n = 7;string s = "The number is: ";cout<<s+m[n]<<endl;return 0;
}

好了,掌握map这几点就足够使用了。

C++STL之map映照容器相关推荐

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

    map映照容器所处理的元素数据,与数据库的具有键值的记录非常相似,由一个键值和其他若干数据(映照数据)组成,键值和映照数据之间,可建立一个数学上的映照关系,由此而得映照容器的名称.**容器的数据结构同 ...

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

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

  3. STL泛型编程之map映照容器

    Map是STL的一个关联容器,它提供一对一的数据处理能力(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的映照元素),由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  4. STL—map(映照容器)

    概述 map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据具有一对一的映照关系,且键值具有唯一性,不能重复出现.所以,我们可以将map看作是由键值标识元素的元素集合(猛地一看是不是 ...

  5. STL_set集合容器+map映照容器

    set集合容器使用一种红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,来组织泛华的元素数据.元素数据的检索,使用二叉检索树得中序遍历算法,检索的效率高于vector.deque和li ...

  6. map 映照容器入门

    欢迎前往我的个人博客阅读原文. 类似于 python 中的字典,map 映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系. map 映照容器插入元素的键值不允许 ...

  7. map映照容器的使用

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

  8. C++ map 映照容器

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

  9. ACM学习历程12——Map映照容器

    Map映照容器是一种实现了平衡二叉树的数据结构,Map中每个元素都是一个键值对<key,value>,且key值是不能重复的,即每个元素的key值都是唯一的.Map容器可以按key检索,使 ...

最新文章

  1. arm linux嵌入式网络控制系统,基于ARM uCLinux的网络控制系统设计与实现
  2. eclipse编辑jsp文件和javascript代码很卡解决办法
  3. js indexOf()
  4. Google 正式抛弃 HTTP!
  5. java putall实现_java putAll与addAll的小区别
  6. MFC界面UI像素设计
  7. linux mint 中文字体,Linux Mint字体设置
  8. Servlet 原理概述
  9. 计算机公式算加减乘除教程视频,Excel快速计算加减乘除教程 Excel表格公式计算方法...
  10. 手机变Android麦克风,【工具】手机秒变摄像头及麦克风方法
  11. ZedBoard教程PL篇(2):按键检测
  12. javascript中实现点赞
  13. darknet 框架 安装编译
  14. CANopen 7.过程数据对象 PDO Process data object)
  15. HTML 5 音频与视频标签
  16. 倪光南院士 你该检讨一下了
  17. Java 获取linux根目录下的文件夹_Linux-包教包会系列
  18. 叉乘点乘混合运算公式_初中数学根式运算法则公式
  19. 会声会影 我们后惠无期
  20. 关于sizeof()使用的几个圈套

热门文章

  1. win10查询计算机ip和用户名和密码,win10系统查询电脑ip子网掩码和默认网关的设置教程...
  2. .net Dapper 学习系列(1) ---Dapper入门
  3. 自由泳如何正确换气?掌握4大关键帮你摆脱困惑
  4. C#编写定制的HID调试助手
  5. 中国联通助力中兴发布首批5G Wi-Fi7 CPE
  6. Android 和 iOS 打包提交审核指南
  7. IDEA下搭建maven实例项目
  8. pub计算机术语,【Unionpub学术】计算机与信息技术专题详情
  9. 鸿蒙开发版刷机,华为鸿蒙OS系统官网,华为鸿蒙OS系统官网开发者Beta版预约 v1.0 - 游戏盒子下载站...
  10. 从中台模式的式微,到ChatGPT的兴起