1022 Digital Library (30分)

18 篇文章 0 订阅

1.注意存储方式

2.string string 映射关系   可以用map +set来实现

3.也可以用pair<string, string>  //这个没试过

4.还有结构体方法实现....后来选了map+set,简单易懂

5. 注意需要把一本书的各个信息分开存  因为可能存在某一类信息的string 刚好一样

 

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<set>
#include<map>
#include<sstream>

using namespace std;

struct Pair {
	string name;
	vector<string> v;
} p;

map<string, set<string> > a[6];

int main() {
	int n;

	cin >> n;
	cin.get();
	for(int i=0; i<n; i++) {
		string ID, ti, au, wo, pu, ye;

		getline(cin, ID);	//	cout << ID << endl;

		getline(cin, ti);	//	cout << ti << endl;

		getline(cin, au);	//	cout << au << endl;

		getline(cin, wo);	//	cout << wo << endl;

		getline(cin, pu);	//	cout << pu << endl;

		getline(cin, ye);	//	cout << ye << endl;
	
		a[1][ti].insert(ID);
		a[2][au].insert(ID);
		a[4][pu].insert(ID);
		a[5][ye].insert(ID);

		stringstream ss(wo);

		while(ss >> wo) {
			a[3][wo].insert(ID);
		}
	}

	cin >> n;
	for(int i=0; i<n; i++) {
		int t;
		string tmp;
		scanf("%d: ", &t);
		getline(cin, tmp);

		cout << t << ": " <<  tmp << endl;;
		if(a[t][tmp].size() == 0){
			cout << "Not Found" << endl;
		}
		for(set<string>:: iterator it= a[t][tmp].begin(); it!=a[t][tmp].end(); it++){
			cout << *it << endl;
 		}

	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值