首页 > 其他 > 详细

stl之map

时间:2017-01-31 19:17:09      阅读:233      评论:0      收藏:0      [点我收藏+]

1 介绍

1.1 头文件 

#include<map>

1.2 定义

map<int,string>my_map1 ;
multimap<string,string>my_map2 ;

其中第一个是key,第二个是value。

也可嵌套定义

map<int,map<string,long> > my_map3 ;

>与>之间须有空格。

 

2 使用

2.1 插入的三种方法

 mymap.insert( pair<int,string> (1,"neko") );         //方式一:用insert函数插入pair对象 
 mymap.insert(map<int,string>::value_type(2,"gee"));  //方式二 :用insert函数插入value_type对象
 mymap[3] = "kk" ;                                     //方式三  : 用数组方式插入值

数组方式非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值(默认值),然后再赋为显示的值,如果元素是类对象,则开销比较大。

前两种用insert函数的方法可以避免开销,但这两种方法键对应的值不能被覆盖。
 
e.g.
mymap.insert(pair<int,string>(2,"neko"));
mymap.insert(pair<int,string>(2,"b"));

2对应的值仍是neko。                    

mymap[3]="neko";
mymap[3]="gee";

3对应的值neko被gee覆盖。

map的一个key只能对应一个value,而multimap可以有多个相同的key对应不同value。举个例子,map就是一个作者只对应一本书,而multimap一个作者可对应多本书。

2.2 大小

mymap.size()

返回元素个数

2.3 遍历

a.(前向)迭代器

map <int,string>::iterator iter ;
for ( iter = mymap.begin() ; iter != mymap.end() ; ++iter )
{
    cout << iter->first <<"   "<<iter->second<<endl ;
}

b. 数组方式(关键字按顺序时)

    for ( int i = a ; i <= mymap.size() ; ++i ) //a为起始关键字
    {
        cout << mymap[i] << endl ;
    }

2.4 查找关键字

a. count函数,找到返回1,否则返回0。

    cout << mymap.count(1) <<endl ;

b. find函数,找到返回所在位置的迭代器,否则返回end位置的迭代器。

    if( mymap.find(2) != mymap.end() )
    {
        cout << mymap.find(2)->second <<endl ;
    }
    else 
    {
        cout<< "failed!" << endl ;
    }

2.5 清空和判断是否为空

  mymap.clear() 清空

  mymap.empty() 空返回1,非空返回0

2.6 删除

mymap.erase(1); //删除关键字为1的 
mymap.erase(mymap.find(1));//迭代器方式删除
mymap.erase(mymap.begin(),mymap.end());//删除一个范围内的元素

 2.7 排序

map中的key自动按升序排列。

如需其他排列方式,要重载运算符。

3 基本操作函数总结

begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
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的函数

 

 

参考资料:http://www.cnblogs.com/fnlingnzb-learner/p/5833051.html

       http://www.cplusplus.com/reference/map/map/?kw=map

              http://baike.baidu.com/link?url=hVAdqK2RPk9MPqgbHLZ7VlPQYQlPfyVeiv4RMoYR97rdGDiMivGQgt_8kyNkzlTquQpBJHcy71nwlI9qEjullJYdPRwV94dV8j6_dDpB-am

stl之map

原文:http://www.cnblogs.com/nekogee/p/6359002.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!