STL关联式容器之映射表——map

来源:互联网 发布:李炎恢php第一季讲义 编辑:程序博客网 时间:2024/05/17 23:54

1、map的特性

和set一样,map的元素都会自动根据键值进行自动排列,map的所有元素都是pair类型,同时拥有实值和键值,pair的第一个元素为键值,第二个元素为实值,且map不允许两个键值相同的元素。

在学习map之前,我们先学习一下pair。

<stl_pair.h>

template<class T1, class T2>

struct pair{

  typedef T1 first_type;

  typedef T2 second_type;

  T1 first;

  T2 second;

   pair():firs(T1()),second(T2()){}//构造函数

   pair(const T1& a, const T2& b): first(a), second(b){}//构造函数
};

2、我们可以通过map的迭代器改变map的元素内容吗?

如果要改变键值,是不行的,但是如果要改变实值,是可以的。因此,map的迭代器既不是const iterator,也不是mutable iterator。

3、对容易犯错函数的说明

(1)首先是插入函数insert()

pair<iterator,bool> insert(const value_type& x){

    return t.insert_unique(x);

}

插入函数的返回类型为pair类型,其中第二个代表插入是否成功,成功的话,前者将指向被插入的那个元素。

(2)下标操作符

下标操作符有两种用法,可能作为左值运用(内容可以被修改),也可能作为右值(内容不可修改)。如

map<string, int> simap;

simap[string("1")]=1;//左值,可以修改

int number=simap[string("1")];

4、multiset和multimap

multiset和multimap分别从set和map衍生而来,不同的是他们可以拥有相同的元素。

他们的底层插入函数是insert_equal而非insert_unique()。

1 0