multimap 的使用例子

项目中需要采用一对多的映射关系,原来一直没有用过 multimap,学习了一下,感觉比想象中的容易,一个小例子,演示一下multimap 的使用。

 

#include <map>
#include <iostream>
using namespace std;

 

void test_multimap()
{
 //构造 multimap 的测试数据
 multimap<string, string> example;
 example.insert(make_pair(string("A"), string("11")));
 example.insert(make_pair(string("A"), string("22")));
 example.insert(make_pair(string("A"), string("33")));
 
 example.insert(make_pair(string("B"), string("44")));
 example.insert(make_pair(string("B"), string("55")));
 example.insert(make_pair(string("B"), string("66")));
 
 example.insert(make_pair(string("C"), string("77")));
 example.insert(make_pair(string("C"), string("88")));
 example.insert(make_pair(string("C"), string("99")));
 
 example.insert(make_pair(string("D"), string("000")));
 example.insert(make_pair(string("D"), string("111")));
 example.insert(make_pair(string("D"), string("222")));
 
 example.insert(make_pair(string("F"), string("0000")));
 example.insert(make_pair(string("F"), string("1111")));
 example.insert(make_pair(string("F"), string("2222")));
 example.insert(make_pair(string("F"), string("3333")));
 
 std::string del_item("A");
 multimap<string,string>::size_type count = example.erase(del_item);
 
 std::string search_item = "C";
 multimap<string, string>::iterator iter = example.find(search_item);
 multimap<string, string>::size_type all = example.count(search_item);
 //采用指定数量遍历
 for(multimap<string, string>::size_type cnt = 0; cnt < all; ++cnt, ++iter)
 {
  std::cout<<iter->first<<":"<<iter->second<<endl;
 }
 
 //采用一个指定范围的迭代器遍历
 search_item = "B";
 for(iter = example.lower_bound(search_item);iter != example.upper_bound(search_item);++iter)
 {
  std::cout<<iter->first<<":"<<iter->second<<endl;
 }
 
 //使用成对迭代器来遍历元素
 search_item = "D";
 pair<multimap<string, string>::iterator,multimap<string, string>::iterator> pos;
 for(pos = example.equal_range(search_item);pos.first != pos.second;++pos.first)
 {
  std::cout<<pos.first->first<<":"<<pos.first->second<<endl;
 }
 
 //multimap 中删除元素
 search_item = "F";
 for(iter = example.begin();iter != example.end();)
 {
  if(iter->second == "0000" || iter->second == "2222")
  {
   std::cout<<"erase "<<iter->first<<":"<<iter->second<<endl;
   example.erase(iter++);
  }
  else
  {
   iter++;
  }
 }
 
 //输出所有元素
 for(iter = example.begin();iter != example.end();++iter)
 {
  std::cout<<iter->first<<":"<<iter->second<<endl;
 }
 

 //查看multimap 的帮助文件,没有看到 multimap::operator[] 的定义,所以应该不支持
  //这个访问方式,就算支持,也不好定义其返回的值,比如 map 是这样定义的
  //Type& operator[](const Key& _Key);multimap 不好定义
 
}

int main(int argc,char *argv[])
{
 test_multimap();
 return 0;
}

 

 

输出:

 

C:77
C:88
C:99
B:44
B:55
B:66
D:000
D:111
D:222
erase F:0000
erase F:2222
B:44
B:55
B:66
C:77
C:88
C:99
D:000
D:111
D:222
F:1111
F:3333
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值