在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考。
1. map简介:
map 是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的数据组成包含两项,一个是它的数据值,一个是用于排序的关键字。其中关键字是惟一的,它用于将数据自动排序。而每个元素的数据值与关键字无关,可以直接改变。
2. 需要加载的头文件:
#include<map> using namespace std;
3. 模板原型:
template < class Key, class Type, class Traits = less<Key>, class Allocator=allocator<pair <const Key, Type>> >
4. 说明:
表 1 :map的参数说明
参数 | 含义 |
Key | 存储在 map 容器中的关键字的数据类型 |
Type | 储存在 map 容器中的数据值的数据类型 |
Traits | 它是一个能提供比较两个元素的关键字来决定它们在 map容器中的相对位置。它是可选的,它的默认值是 less<key> |
Allocator | 它代表存储管理设备。它是可选的,它的默认值为allocator<pair <const Key, Type> > |
map容器有以下的特点:
(1)它是一个相关联的容器,它的大小可以改变,它能根据关键字来提高读取数据能力。
(2)它提供一个双向的定位器来读写取数据。
(3) 它已经根据关键字和一个比较函数来排好序。
(4)它的每一个元素的关键字都是唯一的。
(5)他是一个模板,他能提供一个一般且独立的数据类型。
5. 成员变量:
表2:map的成员变量说明
成员变量 | 功能说明 |
Allocator_type | 对象分配器 |
Const_iterator |
提供一个双向的定位器,他能读取map中的一个常元 |
Const_pointer | 它能提供一个长常元的指针 |
Const_reference | 一个常元的引用 |
Const_reverse_iterator | 提供一个双向的定位器,使得能够在map容器中读取任意一个常值元素 |
Difference_type | 它提供map容器中由定位器所指定的范围内的元素的个数 |
Iterator | 提供一个双向入口定位器,使得能够在map中读取或者修改元素 |
key_compare | 它是提供一个元素间的关键字的次序关系的函数 |
key_type | 它描述每一个元素的关键字 |
mapped_type | 他表示存储在map中的数据类型 |
pointer | 提供一个指向map中的某元素的指针 |
reference | 提供在map容器中的一个常元的引用 |
reverse_iterator | 在反向的map容器中提供一个双向的入口定位器,使得能够读取或者修改元素 |
size_type | map容器中元素个数 |
Value_type | 它提供一个能根据关键字来比较两个元素的相对位置的函数 |
二. 函数:
1. map::begin:
功能:
返回第一元素的定位器(iterator)的地址。 |
语法:
const_iterator begin() const; itrator begin(); |
说明:
当返回的第一个元素的地址值为一个常值定位器(_iterator),则map不会被修改。 当返回的第一个元素的地址值为一个定位器(iterator),这map可被修改。 |
函数返回值:
返回一个指向第一个元素的双向定位器地址。 |
示例1:
/*************************************************** 程序编号: 1 程序功能说明:用begin来定位到ctr的开始位置,并打印出该元素。 ***************************************************/ #include <map> #include <iostream> using namespace std; int main() { map<int,char> ctr; ctr.insert(pair<int,char>(1,'a')); ctr.insert(pair<int,char>(2,'b')); cp=ctr.begin(); //定位到ctr的开始位置 cout<<"The first element is:"<<cp->second<<endl;//打印出第一个元素 return 0; }运行结果:
如图一所示:
2. map::clear:
功能 | 将一个容器的全部元素删除。 |
语法 | void clear() |
说明 | clear会删除map容器的全部元素。 |
函数返回值 | 无 |
示例2:
/*************************************************** 程序编号: 2 程序功能说明:先创建一个map容器,再用clear函数清空,最后打印是否为空的信息。 ***************************************************/ #include <map> #include <iostream> using namespace std; int main() { map<int,char> ctr; ctr.insert(pair<int,char>(1,'a')); ctr.insert(pair<int,char>(2,'b')); ctr.insert(pair<int,char>(3,'c')); cp=ctr.clear();//清空 map 容器 if (ctr.empty())//map 容器为空时 { cout<<"The container is empty"<<endl; } else//map 容器为非空时 { cout<<"The container is not empty"<<endl; } return 0; }
运行结果:
如图二所示:
3. map::count:
功能: | 返回对应某个关键字的元素的个数 |
语法: | size_type count( const Key& _Key ) const; |
说明: | _Key:是要进行匹配的关键字的值。 该函数的返回值的范围是[low_bound(_Key), upper_bound(_Key)] 因为map容器的关键字是唯一的,故他只能去0或者1. |
函数返回值: | 当map容器包含了关键字位_Key的这个元素时,返回1,否则返回0. |
示例3:
/*************************************************** 程序编号: 3 程序功能说明:先创建一个map容器,再用count函数来求出关键字位1的元素的个数。 ***************************************************/ #include <map> #include <iostream> using namespace std; int main() { map<int,char> ctr; ctr.insert(pair<int,char>(1,'a')); ctr.insert(pair<int,char>(2,'b')); ctr.insert(pair<int,char>(3,'c')); int i; i=ctr.count(1);//求出关键字为1的元素的个数 if (i==0) { cout<<"There is no such key!"<<endl; } else { cout<<"The number of key is: "<<i<<endl; } return 0; }