mapSTL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在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;
View Code

相关文章:

  • 2021-12-26
  • 2021-10-06
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
  • 2021-10-22
  • 2022-01-03
相关资源
相似解决方案