multimap多重映照容器
multimap与map基本相同,唯一不同的是multimap允许插入重复键值的元素。由于允许重复键值存在,multimap的元素插入,删除,查找都与map不同。
要使用multimap,需要头文件"#include <map>"
- multimap对象创建、元素插入。(可以重复插入元素,插入元素需要使用insert()方法)
#pragma warning(disable:4786) #include <map> #include <string> #include <iostream> using namespace std; int main(int argc,char* argv[]) { //定义map对象,当前没有任何元素 multimap<string,double> m; m.insert(pair<string,double>("Jack",300.5)); m.insert(pair<string,double>("Kity",200)); m.insert(pair<string,double>("Memi",500)); //重复插入键值"Jack" m.insert(pair<string,double>("Jack",306)); //前向遍历元素 multimap<string,double>::iterator it; for(it=m.begin();it!=m.end();it++) cout<<(*it).first<<" : "<<(*it).second<<endl; return 0; } //运行结果: //Jack : 300.5 //Jack : 306 //Kity : 200 //Memi : 500
- 元素的删除(因为有重复的键值,所以删除操作将会将要删除的键值一次性从multimap中删除)
#pragma warning(disable:4786) #include <map> #include <string> #include <iostream> using namespace std; int main(int argc,char* argv[]) { //定义map对象,当前没有任何元素 multimap<string,double> m; m.insert(pair<string,double>("Jack",300.5)); m.insert(pair<string,double>("Kity",200)); m.insert(pair<string,double>("Memi",500)); //重复插入键值"Jack" m.insert(pair<string,double>("Jack",306)); //前向遍历元素 multimap<string,double>::iterator it; for(it=m.begin();it!=m.end();it++) cout<<(*it).first<<" : "<<(*it).second<<endl; //删除键值等于"Jack"的元素 m.erase("Jack"); cout<<"the elements after deleted:"<<endl; for(it=m.begin();it!=m.end();it++) cout<<(*it).first<<" : "<<(*it).second<<endl; return 0; } /* 运行结果: Jack : 300.5 Jack : 306 Kity : 200 Memi : 500 the elements after deleted: Kity : 200 Memi :500 */
- 元素查找(由于存在重复键值,find()方法只返回重复键值中的第一个元素的迭代器位置,如果没有找到,返回end()迭代器位置)