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 
#include 
#include 



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

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

	// 遍历
	std::cout << "================All member"<< std::endl;
	for (std::multimap::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::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::iterator MultiMapIterator;
	std::pair 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::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::iterator iter = myMultiMap.begin(); iter != myMultiMap.end(); ++iter)
	{
		std::cout << (*iter).first << ":" << (*iter).second << std::endl;
	}

	return 0;
}

你可能感兴趣的:(C++)