关联容器

特点
set

//set
#include<iostream>
#include<iterator>
#include<set>
#include<utility>
using namespace std;
int main(){
	set<double> s;
	pair<set<double>::iterator,bool> r;
	//输入集合中元素
	while(true){
		double v;
		cin>>v;
		if(v==0) break;
		r=s.insert(v);//插入成功 第一个元素为插入位置 第二个为true 否则为false 
		if(!r.second)//第二个元素 
			cout<<v<<" is duplicated\n";
	} 
	set<double>::iterator iter1=s.begin();
	set<double>::iterator iter2=s.end();
	double medium =(*iter1+*(--iter2))/2;
	cout<<"medium:"<<medium<<endl;
	
	cout<<"<=medium:";
	copy(s.begin(),s.upper_bound(medium),ostream_iterator<double>(cout," "));
	cout<<endl;
	
	cout<<">=medium";
	copy(s.lower_bound(medium),s.end(),ostream_iterator<double>(cout," "));
	cout<<endl;
	return 0; 
}
/*
1 2.5 4 5 3.5 5 7 8 2.5 0
5 is duplicated
2.5 is duplicated
medium:4.5
<=medium:1 2.5 3.5 4
>=medium5 7 8
*/

操作
映射

//map
#include<iostream>
#include<map>
#include<string>
#include<utility>
using namespace std;
int main(){
	map<string,int> courses;
	map<string,int>::iterator iter;
	string name;
	courses.insert(make_pair("CSAPP",3));
	courses.insert(make_pair("C++",2));
	courses.insert(make_pair("CSARCH",4));
	courses.insert(make_pair("COMPILER",4));
	courses.insert(make_pair("OS",5));
	int n=3;
	int sum=0;
	//选3门课并计算学分
	while(n>0){
		cin>>name;
		iter=courses.find(name);
		if(iter==courses.end())
			cout<<name<<" is not available\n";
		else{
			sum+=iter->second;
			courses.erase(iter);
			n--;
		}
	} 
	cout<<"Total credit:"<<sum<<endl;
	return 0;
} 

分类
多重集合与多重映射

#include<iostream> 
#include<map>
#include<string>
#include<utility>
using namespace std;
int main(){
	multimap<string,string> courses;
	typedef multimap<string,string>::iterator Courselter;
	courses.insert(make_pair("C++","2-6"));
	courses.insert(make_pair("COMPILER","3-1"));
	courses.insert(make_pair("COMPILER","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);
		if(count==0)
			cout<<"Cannot find this course!\n";
	}while(count==0);
	cout<<count<<" lesson(s) per week: ";
	pair<Courselter,Courselter> range;
	range=courses.equal_range(name);//range.first指向第一个符合条件的位置 second指向最后一个符合条件的下一个位置 
	for(Courselter iter = range.first;iter !=range.second;++iter)
		cout<<iter->second<<" ";
	cout<<endl;
	return 0; 
	
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值