C++ multimap的简单使用

来源:互联网 发布:网络教育 入学考试 编辑:程序博客网 时间:2024/06/10 00:15

这两天,有个任务中用到了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;}// 删除重复的keyMultiMapIterator 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;}

0 0
原创粉丝点击