C++:关联容器(pair、map、set、multiset)

关联容器和顺序容器的本质区别:
关联容器是通过键存取和读取元素、顺序容器通过元素在容器中的位置顺序存储和访问元素。
两个基本的关联容器类型是map和set。
map的元素以键-值对的形式组织:键用作元素在map的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。
set和map类型的对象不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用multimap或mutiset类型,这两种类型允许多个元素拥有相同的键。

1. pair类型

pair类型的初始化

在头文件utility中:
pair p1;
创建一个pair对象,两个元素的类型分别是T1,T2类型,采用初值进行初始化
pair p1(v1,v2);
创建一个pair对象,两个元素的类型分别是T1,T2类型,采用v1,v2分别进行初始化
make_pair(v1,v2);
以v1、v2的值创建一个pair对象,类型分别是v1、v2的类型
p.first
返回p中第一个公有数据成员
p.second
返回p中第二个公有数据成员

2. map关联数组

2.1 map初始化

map m1
创建一个名为m1的空的map对象,其键和值的类型分别为k、v
map m(m2)
创建m2的副本m,m与m2的类型必须有相同的键类型和值类型
map m(b,e)
创建map类型的对象m,存储迭代器b和e标记范围内所有元素的副本,元素的类型必须转换为pair

2.2 map定义的类型

map::key_type:在map中键的类型
map::mapped_type :在map中键所关联的值的类型
map::value_type:一个pair类型,它的first元素具有const map::key::type 类型,而second元素则为map::mapped_type类型

map迭代器进行解引用将产生pair类型的对象,first是键,second是值,:

map<string,int>::iterator map_it = ord_count.begin();
cout<first<<""<second<

2.3 给map添加成员

使用下标访问map对象:在map中查找键值为x的元素。如果找到则返回它的值(类型是map::mapped_type),否则插入一个新的对象,键值为x,值为map中v的默认初值。
因此,使用下标访问map与使用下标访问数组或vector的行为不同,用下标访问不存在的元素将导致在map容器中添加一个新的元素,它的键即为该下标值。这一特性可以使程序简练:

int main()  
{  
    string str;  
    map<string,int> wordCount;  
    while(cin>>str)  
    {  
        ++wordCount[str];  
    }  

    map<string,int>::iterator it_map = wordCount.begin();  
    cout<<"word"<<

你可能感兴趣的:(学习C++)