利用stl::multimap查找共同好友
2011-11-10 22:00
369 查看
标题: | 利用stl::multimap查找共同好友 |
时限: | 1000ms |
内存限制: | 10000K |
总时限: | 3000ms |
描述: | 利用multimap模版查找共同好友并输出 |
输入: | 要查找的所有记录个数所有记录要查找多少人的共同好友这些人的姓名 |
输出: | 共同好友的全部信息(包括stringname;intnum;intage;)按照num排序输出,如果没有,输出NO |
输入样例: | 6张潮刘磊90241922王磊赵磊90242922张潮张平一90243621李平一白上由90242222王浩王洗星90242020王浩张平一902436212张潮王浩 |
输出样例: | 张平一90243621 |
提示: | 相同好友是指姓名学号年龄全部相同 |
#include<iostream> usingnamespacestd; #include<map> #include<string> classFriendMessages { public: FriendMessages(stringname="",intnum=0,intage=0) { this->age=age; this->name=name; this->num=num; } voidPrint() { cout<<name<<''<<num<<''<<age<<endl; } booloperator==(FriendMessagescomp) { return((comp.age==age)&&(comp.name==name)&&(comp.num==num)); } booloperator!=(FriendMessagescomp) { return!((comp.age==age)&&(comp.name==name)&&(comp.num==num)); } intnum;/// private: stringname; intage; }; classProblem { public: Problem(); voidSolved(); private: intx,y; structtestFriendMessages { FriendMessagesFM; intnum; }; multimap<string,FriendMessages>messages; multimap<int,testFriendMessages>comFriend; }; Problem::Problem() { cin>>x; intiTemp=x; while(iTemp--) { stringname,friName; intnum,age; cin>>name>>friName>>num>>age; FriendMessagesFMTemp(friName,num,age); messages.insert(pair<string,FriendMessages>(name,FMTemp)); } } voidProblem::Solved() { cin>>y; intiTemp=0; while(iTemp<y) { stringname; cin>>name; pair<multimap<string,FriendMessages>::iterator, multimap<string,FriendMessages>::iterator>p; p=messages.equal_range(name); if(!iTemp) { multimap<string,FriendMessages>::iteratorit=p.first; for(;it!=p.second;it++) { testFriendMessagestFMTemp; tFMTemp.FM=it->second; tFMTemp.num=1; comFriend.insert(pair<int,testFriendMessages>(tFMTemp.FM.num,tFMTemp)); } } else { multimap<string,FriendMessages>::iteratorit=p.first; for(;it!=p.second;it++) { multimap<int,testFriendMessages>::iteratorq=comFriend.begin(); for(;q!=comFriend.end();q++) { if(q->second.FM==it->second) { q->second.num++; } } } } iTemp++; } multimap<int,testFriendMessages>::iteratorq=comFriend.begin(); for(;q!=comFriend.end();q++) { if(q->second.num>=y) { q->second.FM.Print(); } } } intmain(void) { ProblemP; P.Solved(); system("pause"); returnEXIT_FAILURE; }
FriendMessages中的数据成员(字段)nun是public,这道题的陷阱在于如何处理排序!
代码风格不理想,可能是太想享受用面向对象的思维方式去解决问题吧。
相关文章推荐
- STL中的multimap---顺便说说如何查找同一关键字对应的所有值(利用count, lower_bound/upper_bound, equal_range)
- STL中的multimap---顺便说说如何查找同一关键字对应的所有值(利用count, lower_bound/upper_bound, equal_range)
- mapreduce 查找共同好友
- 查找共同好友
- MapReduce实现之 查找共同好友
- STL中的multimap---顺便说说如何查找同一关键字对应的所有值
- Spark实现之 查找共同好友
- mapreduce系列(7)--查找共同好友
- STL之multimap
- STL学习之十:map和multimap用法示例
- c#网络追踪(查找上游路径,查找共同祖先,下游追踪,查找网络中的环)
- 紫书章五 大理石在哪 UVA 10474(stl排序查找)
- STL之红黑树容器:set,hash_set,multiset,hash_map,multimap
- 利用valgrind 查找内存泄漏
- 利用反射查找绑定事件
- 利用STL中的partition完成快排
- 利用二分收索查找该数在该数组所在的位置,前提是要保证改数组是有序的
- 利用Trie树,来查找单词出现的次数
- c++ stl Editor自定义类 对字符串 查找 替换 删除 插入
- 利用小米数据库查找手机归属地