C++-map 以及mulitmap的函数的应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++-map 以及mulitmap的函数的应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7504字,纯文字阅读大概需要11分钟。
内容图文
![C++-map 以及mulitmap的函数的应用](/upload/InfoBanner/zyjiaocheng/856/e6621c23068f4d919378985267843beb.jpg)
一、定义
(1) map<string, int> Map;
(2) 或者是:typedef map<string,int> Mymap;
Mymap Map;
二、插入数据
插入数据之前先说一下pair 和 make_pair 的用法
pair是一个结构体,有first和second 两个域,可以直接访问
1 string key="sunquan"; 2 int value=123456; 3 pair <string,int> b(key, value);//这里 pair <string,string>是数据类型,后面是调带参构造方法 4 cout<<b.first<<endl;
而make_pair是返回一个pair <类型,类型> 的数据,eg:make_pair("asa",123456); 不过还得找个pair <string,int>类型的变量来接受返回值。
下面步入正题:
(1) Map["abc"]=1;
(2) Map.insert(pair<string,int>("c",3));
(3)Map.insert(make_pair<string,int>("d",4));
三、修改和查找数据
(1)修改Map["sunquan"]=11111;
(2)查找数据 用Map.find(key); 可以通过键来查。
切记不要用int value=Map[key];这样会在Map中增加这个key,而value就是缺省值(int 为0,string为空字符串)。
通过方法(2),会返回迭代器的地址,key不存在的话迭代器的值为Map.end();
四、删除元素
(1)通过key删除;
(2)通过迭代器来删除;
下面看一下详细的代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <map> 6 using namespace std; 7 8 int main() 9 { 10 map<string,int> Map; 11 map<string,int> ::iterator it; 12 Map.insert(pair<string,int>("root",12)); 13 Map.insert(pair<string,int>("scot",11)); 14 for(it=Map.begin();it!=Map.end();it++) 15 cout<<it->first<<" "<<it->second<<endl; 16 it=Map.begin(); 17 Map.erase(it);//通过迭代器删除 18 string key="root"; 19 Map.erase(key);//通过key删除 20 21 Map.erase(Map.begin(),Map.end());//一个迭代器,到另一个迭代器 22 //相当于 Map.clear(); 23 24 for(it=Map.begin();it!=Map.end();it++) 25 cout<<it->first<<" "<<it->second<<endl; 26 return 0; 27 }
注:
map<int, string>::iterator it 是声明一个 迭代器
map<int, string> it 是 声明一个map容器
五、c++中map的一些方法
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
insert()插入元素
max_size()返回可以容纳的最大元素个数
size() 返回map中元素的个数
swap() 交换两个map
get_allocator() 返回map的配置器
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
六.实例
- //仿函数的应用,这个时候结构体中没有直接的小于号重载,程序说明
- #include <iostream>
- #include <map>
- #include <string>
- using namespace std;
- typedef struct tagStudentinfo
- {
- int niD;
- string strName;
- }Studentinfo, *PStudentinfo; //学生信息
- class sort
- {
- public:
- bool operator() (Studentinfo const &_A, Studentinfo const &_B) const
- {
- if(_A.niD < _B.niD)
- return true;
- if(_A.niD == _B.niD)
- return _A.strName.compare(_B.strName) < 0;
- return false;
- }
- };
- int main()
- { //用学生信息映射分数
- map<Studentinfo, int, sort>mapStudent;
- map<Studentinfo, int>::iterator iter;
- Studentinfo studentinfo;
- studentinfo.niD = 1;
- studentinfo.strName = "student_one";
- mapStudent.insert(pair<Studentinfo, int>(studentinfo, 90));
- studentinfo.niD = 2;
- studentinfo.strName = "student_two";
- mapStudent.insert(pair<Studentinfo, int>(studentinfo, 80));
- for (iter=mapStudent.begin(); iter!=mapStudent.end(); iter++)
- cout<<iter->first.niD<<' '<<iter->first.strName<<' '<<iter->second<<endl;
- }
由于STL是一个统一的整体,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,即less<>,如果要从大到小排序呢,这里涉及到的东西很多,在此无法一一加以说明。
还要说明的是,map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N的,如果用map函数可以实现的功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些。
下面说下,map在空间上的特性,否则,估计你用起来会有时候表现的比较郁闷,由于map的每个数据对应红黑树上的一个节点,这个节点在不保存你的 数据时,是占用16个字节的,一个父节点指针,左右孩子指针,还有一个枚举值(标示红黑的,相当于平衡二叉树中的平衡因子),我想大家应该知道,这些地方 很费内存了吧
七.map和multimap相对比,map只能是一对一的关系,multimap可以是一对多的关系。
八.C++ stl Multimap详细代码举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
内容总结
以上是互联网集市为您收集整理的C++-map 以及mulitmap的函数的应用全部内容,希望文章能够帮你解决C++-map 以及mulitmap的函数的应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。