C++ multimap的简单使用

这两天,有个任务中用到了C++的multimap,所以写了个小Demo


/**
 *@File MultiMapDemo.cpp
 *
 *@Author: Bob
 *
 *@Create Time: 2016-12-1 11:57:06
 *
 *@Last Modify: Bob
 *
 *@Last Modify Time: 2016-12-1 11:57:06
 *
 *@Description:
 *   multimap多重映照容器
 *   multimap多重映照容器:容器的数据结构采用红黑树进行管理
 *	 multimap的所有元素都是pair:第一元素为键值(key),不能修改;第二元素为实值(value),可被修改
 *	 multimap特性以及用法与map完全相同,唯一的差别在于:
 *   允许重复键值的元素插入容器(使用了RB-Tree的insert_equal函数)
 *   因此:
 *      键值key与元素value的映照关系是多对多的关系
 *      没有定义[]操作运算
 */

#include <iostream>
#include <string>
#include <map>



int main(int argc, char* argv[])
{
	std::multimap<std::string, int> myMultiMap;

	// 插入
	myMultiMap.insert(std::pair<std::string, int>("Jack", 1));
	myMultiMap.insert(std::pair<std::string, int>("Jack", 2));
	myMultiMap.insert(std::pair<std::string, int>("Bob", 1));
	myMultiMap.insert(std::pair<std::string, int>("Navy", 3));
	myMultiMap.insert(std::pair<std::string, int>("Demo", 4));
	myMultiMap.insert(std::pair<std::string, int>("Bob", 5));

	// 遍历
	std::cout << "================All member"<< std::endl;
	for (std::multimap<std::string, int>::iterator iter = myMultiMap.begin(); iter != myMultiMap.end(); ++iter)
	{
		std::cout << (*iter).first << ":" << (*iter).second << std::endl;
	}

	
	// 统计key为"Jack"的数目
	std::string strFind = "Jack";
	unsigned int uCount = myMultiMap.count(strFind);
	if (uCount == 0)
	{
		std::cout << "================Count " << strFind << ":0"<< std::endl;
	}
	else
	{
		std::cout << "================Count " << strFind << ":" << uCount << std::endl;
		std::multimap<std::string, int>::iterator iter = myMultiMap.find(strFind);
		if (iter != myMultiMap.end())
		{
			for (unsigned int i = 0; i < uCount; ++i)
			{
				std::cout << (*iter).first << ":" << (*iter).second << std::endl;
				iter++;
			}
		}
	}


	std::cout << "================use equal_range"<< std::endl;
	typedef std::multimap<std::string, int>::iterator MultiMapIterator;
	std::pair<MultiMapIterator, MultiMapIterator> iterPair = myMultiMap.equal_range("Jack");
	for (MultiMapIterator it = iterPair.first; it != iterPair.second; ++it)
	{
		std::cout << (*it).first << ":" << (*it).second << std::endl;
	}


	// 删除所有key为"Bob"的键值对
	myMultiMap.erase("Bob"); 
	std::cout << "================After erase Bob"<< std::endl;
	for (std::multimap<std::string, int>::iterator iter = myMultiMap.begin(); iter != myMultiMap.end(); ++iter)
	{
		std::cout << (*iter).first << ":" << (*iter).second << std::endl;
	}


	// 删除重复的key
	MultiMapIterator iter = myMultiMap.find("Jack");
	myMultiMap.erase(iter);
	std::cout << "================Use unique key, erase \"Jack\" " << std::endl;
	for (std::multimap<std::string, int>::iterator iter = myMultiMap.begin(); iter != myMultiMap.end(); ++iter)
	{
		std::cout << (*iter).first << ":" << (*iter).second << std::endl;
	}

	return 0;
}

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值