关联容器

作者: 红色黎明 分类: C++,学习笔记 发布时间: 2012-04-27 09:30

关联容器和顺序容器的本质差别是:关联容器通过键(key)存储和读取元素,而顺序容器通过元素在容器中的位置顺序存储和访问元素。

pair类型

1、初始化:
1)定义时初始化:
pairp1                               //创建一个空的pair对象,它的两个元素分别是T1,T2类型,采用值初始化。
pairauthor(“James”,”Joyce”);2)
2)或者使用typedef简化声明:
typedef pairAuthor;
Author author(“James”,”Joyce”)

2、pair对象的操作对于pair类,可以直接访问其数据成员,其成员都是公有的,分别命名为first、second,用点操作符。
author.first                    //James
author.second             //Joyce

3、生成新的pair对象make_pair(first, second);

4、关联容器不能通过容器大小来定义,因为这样的话就无法知道键所对应的值是什么。容器元素根据键的次序排列。

map类型

1、map对象定义
mapm;
mapm(m2);
mapm(b, e);

2、map类定义的类型
map::key_type                    //索引的键的类型
map::mapped_type          //键所关联的值的类型
map::value_type               //一个pair类型,它的first元素类型具有const map::key_type类型,它的second元素具有map::mapped_type类型

3、对map迭代器进行解引用将产生pair类型对象
map::iterator map_it = word.begin();
map_it->first;                    //map_it迭代器指向的pair对象的第一个元素
map_it->second;             //map_it迭代器指向的pair对象的第二个元素
map提供begin()和end()运算

4、使用下标访问对象
word[“Anna”] = 1;
处理过程:
1)在word中查找键为Anna的元素
2)如果找不到,将一个新的键——值插入到word中,键为Anna,它的值采用值初始化(0或者无初始化值)。
3)读取新插入的元素,并把它的值赋为1下标返回特定键所关联的值。添加新元素时插入元素,同时将它的值初始化为0.如果有赋值操作,就再修改其值。

5、map的insert操作
m.insert(e)                     //若键e.first不存在,则插入新元素e;若键存在,则保持m不变,返回一个pair类型对象以及一个bool类型对象。
m.insert(b, e)               //b,e为标记元素范围的迭代器
m.insert(iter, e)          //插入新元素,并以迭代器iter为起点搜索新元素存储的位置,返回一个迭代器,指向m中具有给定键的元素

简化插入方法:
word.insert(make_pair(“Anna”,1));
word.insert(valType(“Anna”,1));               //typedef map::value_type valType;

6、查找并读取map中的元素,不必担心会插入新元素
m.count(k)                  //返回m中k的出现次数
m.find(k)                      //k存在则返回指向k的迭代器,不存在则返回超出末端迭代器

7、map对象删除元素
m.erase(k)                  //删除k,返回删除元素的个数
m.erase(p)                 //删除迭代器p指向的元素,返回void类型。p必须指向m中真实存在的元素
m.erase(b, e)            //删除迭代器b和e标记范围内的元素

发表评论

电子邮件地址不会被公开。 必填项已用*标注