STL多重关联容器之multiset和multimap

multiset是指允许有重复键值的集合,multimap是指允许一个键值对应多个附加数据的映射(如同一门课程名(键值)一周内对应多个不同的上课时间(附加数据))。

对于多重关联容器,一般较多使用成员函数equal_range和count

equal_range函数的使用如下:

multimap<string,string>s;
string name;
cin>>name;
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> p;
p=s.equal_range(name);

即equal_range返回的是一个二元组,二元组里面的first和second是两个multimap<string,string>::iterator类型的迭代器,multimap迭代器区间[p.first,p.second)里包含了所有键为name的元素。

count函数的使用如下:

multimap<string,string>s;
string name;
cin>>name;
int num;
num=s.count(name);

返回multimap中键为name的元素的总个数。

一个多重映射的完整例子如下:

//上课时间查询
#include<iostream>
#include<map>
#include<utility>
#include<iterator>
#include<string>
using namespace std;

int main() {
	multimap<string, string>courses;
	typedef multimap<string, string>::iterator    courseiter;

	courses.insert(make_pair("C++","2-6"));
	courses.insert(pair<string, string>("JAVA", "3-1"));
	courses.insert(make_pair("JAVA", "5-2"));
	courses.insert(make_pair("OS", "1-2"));
	courses.insert(make_pair("OS", "4-1"));
	courses.insert(make_pair("OS", "5-5"));

	//查找课程
	string name;
	int count;
	do {
		cin >> name;
		count = courses.count(name);//count函数:得到courses容器中键为name的元素个数
		if (count == 0)
			cout << "cannot find this course,please input again." << endl;
		continue;
	} while (count == 0);

	//输出每周上课的次数和时间
	cout << count << "  lesson(s) per week:" << endl;


	pair<courseiter, courseiter>range;
	range = courses.equal_range(name);//equal_range函数:得到一个用pair<multimap<string, string>::iterator,multimap<string, string>::iterator>表示的区间,该区间包含所有键为name的元素
	//即对于返回的二元组range,迭代器区间[range.first,range.second)包含了所有键为name的元素
	
	for (courseiter it = range.first; it != range.second; it++)
		cout << it->second << "  ";
	cout << endl;


	system("pause");
	return 0; 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值