C++标准库扩展为我们提供了顺序容器和关联容器两种容器类型。顺序容器按照元素位置存储和读取元素,而关联容器则按照键(Key)的值来存储和读取数据,二者共享一些共同的操作,但是由于关联容器是根据Key作为“索引”的,因此直接关系位置的操作都不再适用,比如:front\back\push_front\push_back\pop_front\pop_back等。这一章主要介绍两种基本的关联容器类型:map和set。map类型类似于我们经常使用的字典,元素为的形式,通过key可以访问到value的值;而set类型就像我们常说的集合,具有集合的唯一性,即每个元素都不相同,一般可以用来作为操作行为的排除列表的构建。
1. pair类型
为了更方便地使用map容器,C++为我们提供了一种二元向量数据结构:pair类型。使用pair类型前必须包含头文件#include pair类型本身的结构可以从定义的构造函数可以看出:
pair p1; //创建一个类型分别为T1和T2的pair对象,采用值初始化
pair p2(v1, v2); //使用v1和v2分别初始化pair对象的first和second成员
make_pair; //以v1和v2创建pair对象,类型分别为v1和v2类型,返回创建的pair类型--nextpair = make_pair("James", 5);
p1 < p2 //执行严格弱排序,即仅当p1.firts < p2.first | ((p1.firts == p2.first) && (p1.second < p2.second))为真时成立
p1.first p1.second
作为一种模板类型,具体使用时可以如下:
pair word_count;
pair author("James", "Hellen");
由于pari类型使用起来书写比较麻烦,所以可以使用typedef简化其声明:
typedef pari Word_Count;
Word_Count word_count("hello", 5);
-
//test pari type
-
#include <iostream>
-
#include <utility>
-
#include <cstdlib>
-
-
using namespace std;
-
-
int main()
-
{
-
cout << "定义一个统计得分的pari类型: "<<endl;
-
pair<string, int> next_author;
-
cout << next_author.first<<"..."<< next_author.second<<endl;
-
string str("James");
-
int num(5);
-
next_author = make_pair(str, num);
-
//next_author = make_pair("James", 5); //效果同单独定义变量是一致的
-
cout << next_author.first<<"..."<< next_author.second<<endl;
-
-
system("pause");
-
return 0;
-
}
注意make_pair可以接收常量值作为参数,也可以接受变量值作为参数,具体可见上面的小例子。
2. map类型
2.1 map对象的定义
使用map对象之前首先要在头文件中包含#include
阅读(285) | 评论(0) | 转发(0) |