找工作的网站,wordpress页面导航菜单,开发工具宏怎么使用,网站后台建设公司C中 map的了解与基本用法#xff08;代码演示#xff09;
一#xff1a;map的基本认识
Map是STL的一个关联容器#xff0c;它提供一对一#xff08;其中第一个可以称为关键字#xff0c;每个关键字只能在map中出现一次#xff0c;第二个可能称为该关键字的值#xff…C中 map的了解与基本用法代码演示
一map的基本认识
Map是STL的一个关联容器它提供一对一其中第一个可以称为关键字每个关键字只能在map中出现一次第二个可能称为该关键字的值的数据处理能力由于这个特性它完成有可能在我们处理一对一数据的时候在编程上提供快速通道。这里说下map内部数据的组织map内部自建一颗红黑树(一种非严格意义上的平衡二叉树)这颗树具有对数据自动排序的功能所以在map内部所有的数据都是有序的后边我们会见识到有序的好处。二map的基本操作函数建议了解map常用的函数 以后用到啥 再学啥
C Maps是一种关联式容器包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear( 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true end() 返回指向map末尾的迭代器 equal_range() 返回特殊条目的迭代器对 erase() 删除一个元素 find() 查找一个元素 get_allocator() 返回map的配置器 insert() 插入元素 key_comp() 返回比较元素key的函数 lower_bound() 返回键值给定元素的第一个位置 max_size() 返回可以容纳的最大元素个数 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 size() 返回map中元素的个数 swap() 交换两个map upper_bound() 返回键值给定元素的第一个位置 value_comp() 返回比较元素value的函数
三map常用函数的代码演示
1: map最基本的构造函数 map关键字键值 mapint mapstring , int mapstring; mapint ,string mapint;mapsring, charmapstring; map char ,stringmapchar;mapchar ,intmapchar; mapint ,char mapint2:插入数据
#includebits/stdc.h
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 mapint,stringm;// m[1];
// m[2];// 插入数据 // 第一种方法cout ***************************** endl;cout 第一种方法插入 endl;m.insert(pairint ,string(1,stu1));m.insert(pairint ,string(2,stu2));m.insert(pairint ,string(3,stu3));mapint,string::iterator t;
// for( t m.begin(); t ! m.end(); t ){cout t-first t-second endl;//t-first表示关键字t-second 表示键值 } cout ***************************** endl;cout 第二种方法插入 endl;m[1] stu1;m[2] stu2;m[3] stu3;for( t m.begin(); t ! m.end(); t ){cout t-first t-second endl; } } 3查找数据
#includebits/stdc.h
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 mapint,stringm;// m[1];
// m[2];// 插入数据 // 第一种方法cout ***************************** endl;cout 第一种方法插入 endl;m.insert(pairint ,string(1,stu1));m.insert(pairint ,string(2,stu2));m.insert(pairint ,string(3,stu3));mapint,string::iterator t;cout ***************************** endl;cout 查找 endl; t m.find(1);if(t ! m.end()){cout 查找成功 endl; }else{cout 查找失败 endl; }} 4删除数据
#includebits/stdc.h
using namespace std;int main()
{//构造方式 int 那个位置代表的是 关键字 而 string 那个位置代表的是 键值 mapint,stringm;// m[1];
// m[2];// 插入数据 // 第一种方法cout ***************************** endl;cout 第一种方法插入 endl;m.insert(pairint ,string(1,stu1));m.insert(pairint ,string(2,stu2));m.insert(pairint ,string(3,stu3));mapint,string::iterator t;for( t m.begin(); t ! m.end(); t ){cout t-first t-second endl; } cout ***************************** endl;cout 删除 endl; t m.find(2);m.erase(t);for( t m.begin(); t ! m.end(); t ){cout t-first t-second endl; }
} 5运行结果 四map用法的补充
1.将map容器中默认的递增顺序改为递减的顺序这里的顺序指的是关键值
#includebits/stdc.h
using namespace std;int main(){std::mapint, int, std::greaterint m; //map默认的递增 这样改成递减的
//在创造map时增加参数 **std::greaterint**就变成增加int a[5] {5,4,3,2,1};mapint,int::iterator t; for(int i 0; i 5; i){m[i] a[i];}for(t m.begin(); t ! m.end(); t){cout t-first t-second endl; } }2利用map容器实现一对多 /**思路我们想要的结果是 一对多 即一个人对应好几个课程号可以用到mapstring,vectorint 我还考虑了vectorintv[2500],但是vector中不能表示成 一个字符串对应好几个数所以选择了map */
#includebits/stdc.h
using namespace std;int main(){int N,K;mapstring,vectorint m; // 注意vectorint 后面得加上空格 mapstring,vectorint ::iterator t;scanf(%d%d,N,K);for(int i 1; i K; i){int nums,a;// cin i nums;scanf(%d%d,a,nums);//这里不要输入 i即便i是从1开始的for(int j 0; j nums; j){// string str;// cin str;char ch[6];scanf(%s,ch);m[ch].push_back(a); } }for(int i 0; i N; i){char name[6];scanf(%s,name);printf(%s %d,name,m[name].size()); //m[name].size() 输出一个人选择了多少门课程 sort(m[name].begin(),m[name].end());// for(int temp : m[name]){
// printf( %d,temp);
// }for(int j 0; j m[name].size(); j){cout m[name][j]; } printf(\n);}}3利用map容器
m[num] 其默认值是为0