map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,很明显学号用int描述,姓名用字符串描述,下面给出map描述代码:
map<int, string> mapStudent;
1. map的构造函数
map共提供了6个构造函数,这块涉及到内存分配器这些东西,略过不表,在下面我们将接触到一些map的构造方法,这里要说下的就是,我们通常用如下方法构造map:
map<int, string> mapStudent;
map<string, int> month_name;
2. 数据的插入与遍历
在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
(1)用数组方式插入数据,下面举例说明:
map<int, string>:
1 #include <map> 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 int main() 6 { 7 map<int, string> mapStudent; 8 mapStudent[1] = “student_one”; 9 mapStudent[2] = “student_two”; 10 mapStudent[3] = “student_three”; 11 map<int, string>::iterator iter; 12 for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) 13 { 14 cout<<iter->first<<” ”<<iter->second<<end; 15 } 16 }
map<string, int> :
1 #include <map> 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 map<string , int> month_name; 9 10 month_name["January] = 1; 11 month_name["February"] = 2; 12 month_name["July"] = 7; 13 14 map<string , int>::iterator it; 15 for(it = month_name.begin(); it != month_name.end(); it++) 16 { 17 cout<<it->first<<” ”<<it->second<<end; 18 } 19 return 0; 20 }
(2)用insert函数插入pair数据,下面举例说明
1 #include <map> 2 #include <string> 3 #include <iostream> 4 using namespace std; 5 int main() 6 { 7 map<int, string> mapStudent; 8 mapStudent.insert(pair<int, string>(1, “student_one”)); 9 mapStudent.insert(pair<int, string>(2, “student_two”)); 10 mapStudent.insert(pair<int, string>(3, “student_three”)); 11 map<int, string>::iterator iter; 12 for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) 13 { 14 cout<<iter->first<<” ”<<iter->second<<end; 15 } 16 return 0;