map是STL的一个关联容器,它提供一对一的hash(哈希表)
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一映射的关系。
使用map
1 #include <map> //注意,STL头文件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
1 std:map<int, string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.
1 map<int, string> mapStudent; 2 map的构造函数
1 // 定义一个map对象 2 map<int, string> mapStudent; 3 4 // 第一种 用insert函數插入pair 5 mapStudent.insert(pair<int, string>(000, "student_zero")); 6 7 // 第二种 用insert函数插入value_type数据 8 mapStudent.insert(map<int, string>::value_type(001, "student_one")); 9 10 // 第三种 用"array"方式插入 11 mapStudent[123] = "student_first"; 12 mapStudent[456] = "student_second";
以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的 插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能在插入数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对 应的值,用程序说明如下
1 mapStudent.insert(map<int, string>::value_type (001, "student_one")); 2 3 mapStudent.insert(map<int, string>::value_type (001, "student_two"));
上面这两条语句执行后,map中001这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,程序如下
1 // 构造定义,返回一个pair对象 2 pair<iterator,bool> insert (const value_type& val); 3 4 pair<map<int, string>::iterator, bool> Insert_Pair; 5 6 Insert_Pair = mapStudent.insert(map<int, string>::value_type (001, "student_one")); 7 8 if(!Insert_Pair.second) 9 cout << ""Error insert new element" << endl;
查找元素
1 // find 返回迭代器指向当前查找元素的位置否则返回map::end()位置 2 auto iter = mapStudent.find("123"); 3 4 if(iter != mapStudent.end()) 5 cout<<"Find, the value is"<<iter->second<<endl; 6 else 7 cout<<"Do not Find"<<endl;
1 //迭代器刪除 2 iter = mapStudent.find("123"); 3 mapStudent.erase(iter); 4 5 //用关键字刪除 6 int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0 7 8 //用迭代器范围刪除 : 把整个map清空 9 mapStudent.erase(mapStudent.begin(), mapStudent.end()); 10 //等同于mapStudent.clear() 11 int nSize = mapStudent.size(); 12 //在往map里面插入了数据,我们怎么知道当前已经插入了多少数据呢,可以用size函数
1 C++ maps是一种关联式容器,包含“关键字/值”对 2 3 begin() 返回指向map头部的迭代器 4 5 clear() 删除所有元素 6 7 count() 返回指定元素出现的次数 8 9 empty() 如果map为空则返回true 10 11 end() 返回指向map末尾的迭代器 12 13 equal_range() 返回特殊条目的迭代器对 14 15 erase() 删除一个元素 16 17 find() 查找一个元素 18 19 get_allocator() 返回map的配置器 20 21 insert() 插入元素 22 23 key_comp() 返回比较元素key的函数 24 25 lower_bound() 返回键值>=给定元素的第一个位置 26 27 max_size() 返回可以容纳的最大元素个数 28 29 rbegin() 返回一个指向map尾部的逆向迭代器 30 31 rend() 返回一个指向map头部的逆向迭代器 32 33 size() 返回map中元素的个数 34 35 swap() 交换两个map 36 37 upper_bound() 返回键值>给定元素的第一个位置 38 39 value_comp() 返回比较元素value的函数
标签:总结,知识点,mapStudent,insert,返回,value,插入,map From: https://www.cnblogs.com/saucerdish/p/17805802.html