关联容器-multimap

来源:互联网 发布:辽宁省软件行业协会 编辑:程序博客网 时间:2024/05/16 18:28

multimap与multiset类型容许一个键对应多个值,与map和set相比,唯一的区别是不能使用下标来进行操作。

以下实例详细说明了multimap的定义、元素的添加和删除、元素的查找等操作。

#include "stdafx.h"#include <string>#include <iostream>#include <map>using namespace std;int _tmain(int argc, _TCHAR* argv[]){// anthor---bookmultimap<string,string> strmap;//元素的添加操作:typedef multimap<string,string>::value_type pair_type;//pair类型//注意:元素插入的顺序 != 元素在容器中保存的顺序strmap.insert(pair_type("jone","c++"));strmap.insert(pair_type("jone","c"));strmap.insert(pair_type("jone","c++ primer"));strmap.insert(pair_type("jerry","java"));strmap.insert(pair_type("jerry","javascript"));strmap.insert(pair_type("Alan","oracle"));strmap.insert(pair_type("Alan","sqlserver"));strmap.insert(pair_type("Alan","mysql"));cout<<"元素的查找1:"<<endl;typedef multimap<string,string>::size_type sz_type;sz_type nCount = strmap.count("Alan");//返回键:Alan 出现的次数multimap<string,string>::iterator iter = strmap.find("Alan");//指向第一个拥有该键的元素                                                              //同一个键所关联的元素相邻存放for (sz_type i = 0;i < nCount;i++){cout<<"键:"<<iter->first<<" "<<"值:"<<iter->second<<endl;iter++;}cout<<"元素的查找2:"<<endl;//lower_bound(k) 返回一个迭代器,指向第一个与k(键)匹配的元素//upper_bound(k) 返回一个迭代器,指向最后一个与k(键)匹配元素的下一位置multimap<string,string>::iterator iter1 = strmap.lower_bound("jerry");multimap<string,string>::iterator iter2 = strmap.upper_bound("jerry");for (;iter1 != iter2;iter1++){cout<<"键:"<<iter1->first<<" "<<"值:"<<iter1->second<<endl;}cout<<"元素的查找3:"<<endl;//equal_range(k) 返回一个迭代器对的pair对象,first是lower_bound(k),second是upper_bound(k)。typedef multimap<string,string>::iterator iter_type;pair<iter_type,iter_type> p = strmap.equal_range("jone");for (;p.first != p.second;p.first++){cout<<"键:"<<p.first->first<<" "<<"值:"<<p.first->second<<endl;}cout<<"元素的删除1:"<<endl;multimap<string,string>::iterator iter3 = strmap.lower_bound("Alan");multimap<string,string>::iterator iter4 = strmap.upper_bound("jerry");cout<<"删除前:"<<strmap.size()<<endl;strmap.erase(iter3,iter4);//删除两个迭代器之间的元素cout<<"删除后:"<<strmap.size()<<endl;multimap<string,string>::iterator iter5;for (iter5 = strmap.begin();iter5 != strmap.end();iter5++){cout<<"键:"<<iter5->first<<" "<<"值:"<<iter5->second<<endl;}cout<<"元素的删除1:"<<endl;int iCount = 0;iCount = strmap.erase("jone");cout<<"第一次删除数量:"<<iCount<<endl;iCount = strmap.erase("jerry");cout<<"第二次删除数量:"<<iCount<<endl;iCount = strmap.erase("Alan");cout<<"第三次删除数量:"<<iCount<<endl;cout<<"最终: "<<strmap.size()<<endl;return 0;}


原创粉丝点击