C++学习笔记之STL标准库(七)map/multimap 关联容器

包含头文件 #include <map>  声明命名空间using namespace std;

map/multimap是关联容器的一种,每个节点中存储一个类型为pair<const Key,T>的元素,它们会对存储的元素进行自动排序,只有const Key参与存储的次序比较,存储元素的值不能直接的被改变,只能通过删除旧值,再插入新值的方式达到更改元素值的目的。multiset允许两个相邻的元素有次序相等的键Key,而map不允许,这是他们的唯一区别。关联容器set, multiset以及后面的map, multimap内部采用的是一种非常高效的平衡检索二叉树:红黑树。

模板类map相比set、multiset、multimap有一个独一无二的特性,它定义了成员操作符:T& operator[const Key& key],它把键值key和它所映射的值联系了起来。可以用来查找给定键值唯一确定的元素,或者在不存在这样的元素时添加一个。

1)构造函数

  map(); //默认构造函数,创建一个空的map对象,如:map<int,string> a;

  multimap(); //默认构造函数,创建一个空的multimap对象,如:multimap<int,int> b;

  map(const Pred& comp); //创建一个空的map对象,并指定排序规则

  multimap(const Pred& comp); //创建一个空的multimap对象,并指定排序规则

  map(const map& x);//map拷贝构造函数

  multimap(const multimap& x);//multimap拷贝构造函数

  map(InIt first,InIt last); //复制序列[first,last)序列内的元素到map中

  multimap(InIt first,InIt last); //复制序列[first,last)序列内的元素到multimap中

  map(InIt first,InIt last,const Pred& comp);//复制序列[first,last)序列内的元素到map中,并指定排序规则

  multimap(InIt first,InIt last,const Pred& comp);//复制序列[first,last)序列内的元素到multimap中,并指定排序规则

2)遍历函数

  iterator begin(); //返回map/multimap头指针,指向第一个元素

  iterator end(); //返回map/multimap尾指针,指向map/multimap最后一个元素的下一个位置

  reverse_iterator rbegin(); //反向迭代器,指向最后一个元素

  reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置

  mapped_type operator[](const Key& key); //map独有,访问键值对应的元素值

3)判断函数

  bool empty() const; //被控序列为空时,该成员函数返回true

4)大小函数

  size_type size() const; //返回被控序列的长度

  size_type max_size() const; //返回容器对象所能控制的最长序列的长度

5)插值函数

  iterator insert(const T& val); //multimap,插入元素val,并自动排序

  pair<iterator,bool> insert(const T& val); //map,插入元素val,并自动排序,为什么返回是pair呢,pair里有一个bool形变量,标志插入是否成功,因为map不允许有重复的键值,因此插入元素时,需要判断容器内是否已经存在该键值

  iterator insert(iterator it,const T& val); //指定在迭代器it处插入元素值val。注意,it只是一个参考位置,因为map、multimap是自动排序的,所以最终是按照插入元素值的大小来决定插入位置的,而这个输入的插入位置只是在程序员了解序列元素位置时给出的参考位置,可能会加快插入速度

  void insert(InIt first,InIt last); //对序列[first,last)中的每一个元素调用一次insert(*it)

6)删除函数

  iterator erase(iterator it); //删除被控序列中迭代器it所指定的元素

  iterator erase(iterator first,iterator last); //删除被控序列中区间[first,last)内所有元素

  size_type erase(const Key& key); //删除元素值等于key的元素,并返回删除的元素个数

  void clear(); //清空被控序列

7)其他操作函数

  void swap(map& x); //交换map元素

  void swap(multimap& x); //交换multimap元素

  key_compare key_comp() const; //返回一个用于元素间值比较的函数

  value_compare value_comp() const; //返回一个用于比较元素间的值的函数

  iterator find(const Key& key) const; //查找功能,返回元素值等于key的迭代器指针

  size_type count(const Key& key) const; //返回容器中元素等于key的元素的个数,由于一个键值在map只可能出现0或1次,因此在map中可以用来判断某一键值是否出现在map中

  iterator lower_bound(const Key& key) const; //返回容器中值大于等于key的迭代器指针

  iterator upper_bound(const Key& key) const; //返回容器中值大于key的迭代器指针

  pair<iterator,iterator> equal_range(const Key& key) const; //返回一对迭代器,分别表示第一个大于或等于key的元素和第一个大于key的元素,返回值是一个pair类型

猜你喜欢

转载自www.cnblogs.com/jason-20160301/p/8977623.html