C++ Primer(第五版)学习笔记

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器

多重映照容器multimap与map结构基本相同,但由于重复键值存在,所以multimap的元素插入、删除、查找都与map的方法不相同。

1、multimap对象创建、元素插入

插入元素时,需要使用insert()方法和类似pair<string,double>(“Jack”, 300.5)的元素结构。可以看到,重复的元素是按照插入的先后顺序排序的。

#include <iostream>#include <stdio.h>#include <string>#include <map> using namespace std; int main(){ multimap<string, double> str;//插入元素 str.insert(pair<string, double>("Jack", 400)); str.insert(pair<string, double>("Kity", 200)); str.insert(pair<string, double>("Jack", 300.5)); str.insert(pair<string, double>("Memi", 500)); str.insert(pair<string, double>("Jack", 306));for(multimap<string, double>::iterator iter = str.begin(); iter !=str.end(); iter++)cout << (*iter).first << " : " <<(*iter).second << endl; return 0;}

运行结果:

Jack : 400

Jack : 300.5

Jack : 306

Kity : 200

Memi : 500

2、元素的删除:erase()和clear()

删除某个键值采用erase()方法,当有重复的键值,会一次性都删除。使用clear()方法可将multimap容器中的元素清空。

#include <iostream>#include <stdio.h>#include <string>#include <map> using namespace std; int main(){multimap<string, double> str;//插入元素str.insert(pair<string, double>("Jack", 400));str.insert(pair<string, double>("Kity", 200));str.insert(pair<string, double>("Jack", 300.5));str.insert(pair<string, double>("Memi", 500));str.insert(pair<string, double>("Jack", 306));for(multimap<string, double>::iterator iter = str.begin(); iter !=str.end(); iter++)cout << (*iter).first<< ": "<< (*iter).second << endl;//删除Jackint n = str.erase("Jack");cout << "删除元素个数: " << n <<endl;cout << "删除后的元素: " << endl;for(multimap<string, double>::iterator iter = str.begin(); iter !=str.end(); iter++)cout << (*iter).first<< ": "<< (*iter).second << endl;//清空str.clear();if(str.size() == 0)cout << "元素为空" << endl;elsecout << "元素个数为:" << endl;return 0;}

运行结果:

Jack : 400

Jack : 300.5

Jack : 306

Kity : 200

Memi : 500

删除元素个数:3

删除后的元素:

Kity : 200

Memi : 500

元素为空

3、元素的查找

由于multimap存在重复的键值,所以find()方法只返回第一个元素的迭代器位置。如果没有找到该键值,则返回end()迭代器位置。

#include <iostream>#include <stdio.h>#include <string>#include <map> using namespace std; int main(){ multimap<string, double> str;//插入元素 str.insert(pair<string, double>("Jack", 400)); str.insert(pair<string, double>("Kity", 200)); str.insert(pair<string, double>("Jack", 300.5)); str.insert(pair<string, double>("Memi", 500)); str.insert(pair<string, double>("Jack", 306));for(multimap<string, double>::iterator iter = str.begin(); iter !=str.end(); iter++)cout << (*iter).first << " : " <<(*iter).second << endl;//查找键值 cout << "找到的结果: "; multimap<string, double>::iterator iter; iter = str.find("Jack"); if(iter != str.end())cout << (*iter).first << " : " <<(*iter).second << endl; elsecout << "没有找到结果" << endl;cout << "找到的结果: "; iter = str.find("Nacy"); if(iter != str.end())cout << (*iter).first << " : " <<(*iter).second << endl; elsecout << "没有找到结果" << endl; return 0;}

运行结果:

Jack : 400

Jack : 300.5

Jack : 306

Kity : 200

Memi : 500

找到的结果:Jack :400

找到的结果:没有找到结果

4、自定义比较函数

默认情况下,按照键值由小到大的顺序插入元素。由于内部数据结构都是红黑树,,因此编写比较函数与map是一致的。编写方法有两种,

(1)如果元素不是结构体,那么可以编写比较函数。下面实现键值由大到小的顺序将元素插入mutlmap中:

还深深埋在心底,要除去,怕是不能活命。

C++ Primer(第五版)学习笔记

相关文章:

你感兴趣的文章:

标签云: