C++的STL中map与multimap

C++的STL中map与multimap

一、map与multimap的区别等同于set 与multiset的区别。

map是关联容器,map 的每个元素都分为关键字和值两部分,容器中的元素是按关键字排序的,并且不允许有多个元素的关键字相同。

注意,不能直接修改 map 容器中的关键字。因为 map 中的元素是按照关键字排序的,当关键字被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。

要使用map,必须包含关键字。

二、map功能

自动建立Key - value的对应。key 和 value可以是任意你需要的类型。

根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。

快速插入Key -Value 记录。

快速删除记录

根据Key 修改value记录。

遍历所有记录。

key:

map的第一个关键字,也就是key,每个key只能在map中出现一次。

value:

map的第二个参数,也称为对应key的值。

map内部数据排列其实是内部自建一颗红黑树(非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,红黑树的特点是增加和删除节点对迭代器的影响很微弱,操作的话只对操作节点有影响。

对于迭代器来说,可以修改实值,而不能修改key。

template < class Key, class T, class Pred = less, class A = allocator >
class map{
    ...
    typedef pair< const Key, T > value_type;
    ...
};

map 和 multimap 十分类似,区别在于 map 容器中元素的关键字不能重复。multimap 有的成员函数,map 都有。此外,map 还有成员函数 operator[]:

T & operator[] (Key k);

该成员函数返回 first 值为 k 的元素的 second 部分的引用。如果容器中没有元素的 first 值等于 k,则自动添加一个 first 值为 k 的元素。如果该元素的 second 成员变量是一个对象,则用无参构造函数对其初始化。

#include 
#include     //map的头文件 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

template
ostream &operator<<(ostream &o,const pair &p){ //pair对象输出为(first,second)形式 
	o<<"("<
void Print(T first,T last){
	//输出pair的fitst,last区间 
	for(;first!=last;++first)
		cout<<*first<<" ";
		cout< > MYMAP; //此容器关键字为整形,元素按关键字从大到小排序 
int main(int argc, char** argv) {
	MYMAP mp;
	mp.insert(MYMAP::value_type(15,2.7));
	pair p=mp.insert(make_pair(15,99.3));
	if(!p.second)
		cout<<*(p.first)<<"already exists"<

C++的STL中map与multimap_第1张图片

要访问关键字为 40 的元素。在没有这个元素的情况下,一个关键字为 40、值为 0 的元素被自动插入容器。mp[40] 等价于mp.operator[](40);,其返回值是关键字为 40 的那个元素(不论是原有的还是新插入的)的 second 成员变量的引用。后面两行的道理与此类似。

三、Map常用函数

  C++ maps是一种关联式容器,包含“关键字/值”对

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是                            1或0。

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数

四、迭代器

map::iterator t;
 
	for(t=p.begin();t!=p.end();t++)
{......
.....}
//前向迭代器、反向迭代器、数组形式输出
    for(it = int_str.begin(); it != int_str.end(); it++)          //正向输出 
        cout<first<<' '<second<::reverse_iterator iter;  
    for(iter = int_str.rbegin(); iter != int_str.rend(); iter++)  //反向输出 
        cout<first<<"  "<second<

 

 

你可能感兴趣的:(C++,STL,Map)