STL 中map 容器的基本用法


0. 创建

map<Key_Type key , Value_Type value,  less<Key_Type> > map1;  //定义了一个键索引为Key_Type类型,关联值索引为 Value_Type类型的关联容器。less<Key_Type>的作用是使得关联容器按照key 升序存储。
map<Key_Type key , Value_Type value, greater<Key_Type> > map2; // 与map1相同,但是是按照key降序存储。

1. 构造函数

  map<k, v>m          // 创建名为m 的map对象,键和值的类型分别为k和v
  map<k, v>m( m2 )    // 创建m2的副本, m与m2必须有相同的键类型和值类型
  map<k,v>m(b, e)    //创建map类型的对象m, 存储迭代器b和e 标记范围内所有元素的副本

2. map 定义的类型

  map<k, v> :: key_type    // 在map 容器中, 做索引的键的类型
  map<k, v> :: mapped_type // 在map容器中,键所关联的值的类型
  map<k, v>:: value_type  // 一个pair类型, 它的first元素具有const map<k,v>:: key_type 类型, 而second 元素则为map<k, v>::mapped_type。

 举例:        

 map<int, vector<int> >m;
 map<int, vector<int> >:: key_type  相当于   int
 map<int, vector<int> >:: mapped_type 相当于  vector<int>
 map<int, vector<int> >:: value_type 相当于 pair<int, vector<int> >

3. 添加元素

 (a)  下标访问, 下标访问不存在的元素将导致在map容器中添加一个新元素。         

 map<string, int> word_count;  // empty map
 word_count["Anna"]  = 1;

 (b)  insert 函数的使用

 typedef map<string, int>:: value_type  ValueType;
 word_count.insert( ValueType("Anna", 1) );

4. 访问数据

 m.count(k)        // 返回m中k 出现的次数
 m.find(k)          // 如果容器中存在按k索引的元素, 则返回指向该元素的迭代器。 如果不存在, 则返回超出末端迭代器 m.end()。
 map <string, int>  word_count;
 int occurs = word_count["foobar"];

第一种访问方式:

 int occurs = 0;
 if(word_count.count( "foobar")  )
 occurs = word_count["foobar"];

第二种访问方式:

 int occurs = 0;
 mat<string, int> :: iterator it = word_count.find("foobar");
 if(it != word_count.end() )
    occurs = it->second;

5.删除数据 

 m.erase( k )                  // 删除m 中键为k 的元素。 返回值为size_type, 表示删除元素的个数。
 m.erase(p)                    // 删除迭代器p 所指向的元素,p必须指向m中确实存在的元素,而且不等于m.end()
 m.erase(b, e)                // 删除迭代器b,e范围内的元素

6.遍历数据

for(map<string, int>::const_iterator it = word_count.begin();
           it< word_count.end(); it++)
  {
    cout<<it->first<<" occurs ";
    cout<<it->second<< "times"<<endl;
  }


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值