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;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值