C Primer Plus书中代码注释-chapter16_14_multimap.cpp

本文通过C++代码示例,展示了如何使用STL中的multimap来存储和操作带有重复键的数据集,具体应用为存储不同城市的区号及其对应的城市名。代码实现了插入数据、计数相同区号的城市数量、遍历并打印所有城市信息,以及针对特定区号的城市信息查询。
摘要由CSDN通过智能技术生成

chapter16_14_multimap.cpp

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

typedef int KeyType;			//定义int类型数据为键类型
typedef std::pair<const KeyType, std::string> Pair;	//定义Pair这个新类型为pair,封装了一对数据,方便后面直接使用
typedef std::multimap<KeyType, std::string> MapCode;	//定义MapCode为multimap的缩写,方便后面直接使用

int main(){
	using namespace std;
	MapCode codes;				//定义codes是一个multimap类型的容器
	
	codes.insert(Pair(415, "San Francisco"));	//向multimap容器中插入数据,因为每个数据包含两个值(键类型和值类型)
												//因此这里需要使用pair,每次使用pair时均需要进行定义,所以这里使用了typedef,
												//简化了调用pair的步骤,否则需要这样书写代码: 
												//  codes.insert(pair<const KeyType, std::string>(415, "San Francisco"));
												//ps:这样写真的很麻烦
	codes.insert(Pair(510, "Oakland"));
	codes.insert(Pair(718, "Brooklyn"));
	codes.insert(Pair(718, "Staten Island"));
	codes.insert(Pair(415, "San Rafael"));
	codes.insert(Pair(510, "Berkeley"));
	
	cout << "Number of cities with area code 415: "
	<< codes.count(415) << endl;				//codes是一个multimap类型的容器,使用count接收键类型,返回具有该键的元素数目
	cout << "Number of cities with area code 718: "
	<< codes.count(718) << endl;
	cout << "Number of cities with area code 510: "
	<< codes.count(510) << endl;
	cout << "Area Code City\n";
	MapCode::iterator it;						//定义了一个multimap类型的迭代器
	for(it = codes.begin(); it != codes.end(); ++it)	//让迭代器指向容器的开始位置,然后开始循环
		cout << "    " << (*it).first << "    " << (*it).second << endl;	//取出迭代器it指向的pair中的元素 (是否可用指针 it->first???)
	
	pair<MapCode::iterator, MapCode::iterator> range = codes.equal_range(718);	
														//pair了两个MapCode类型的迭代器,目的是为了接收equal_range对应的键值返回的两个迭代器,
														//这两个迭代器表示的区间与该键匹配,因此这时的range的first元素就是lower_bound,
														//second元素就是upper_bound
	cout << "Cities with area code 718:\n";
	
	for(it = range.first; it != range.second; ++it)
		cout << (*it).second << endl;					//这里的*it是取出对应位置处的元素的值类型
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值