用vector、 multimap、 list容器实现好友列表的各种操作 C++

来源:互联网 发布:os x windows 双系统 编辑:程序博客网 时间:2024/06/16 06:02
用vector、multimap、list容器实现好友列表的各种操作C++--------------------------------------------------BuddyList.h------------------------------------------------#include<map>#include<string>#include<list>//using std::multimap;//using std::string;//using std::list;using namespace std;struct Info{ string id; string name; string otherInfo;};class BuddyList{public: BuddyList(); Info getMyInfo(); void setMyInfo(const Info &info); void addBuddy(const Info &friInfo); bool remove(const string &friId); bool isBuddy(const string &friId); list<Info> getBuddies() const;protected: multimap<string,Info>mBuddies;private: Info myInfo; //BuddyList(const BuddyList &src); //BuddyList & operator=(const BuddyList &rhs);};BuddyList::BuddyList(){};Info BuddyList::getMyInfo(){ return myInfo;}void BuddyList::setMyInfo(const Info &info){ myInfo = info;}void BuddyList::addBuddy(const Info &friInfo){ if( !isBuddy(friInfo.id))  mBuddies.insert(make_pair(myInfo.id,friInfo));}bool BuddyList::remove(const std::string &friId){ if(!isBuddy(friId))  return false; multimap<string,Info>::iterator start,end; start = mBuddies.lower_bound(myInfo.id); end = mBuddies.upper_bound(myInfo.id); for(;start != end; ++start) {  if(start->second.id == friId)  {   mBuddies.erase(start);   return true;  } }}bool BuddyList::isBuddy(const std::string &friId){ multimap<string,Info>::iterator start,end; start = mBuddies.lower_bound(myInfo.id); end = mBuddies.upper_bound(myInfo.id); for(;start != end; ++start) {  if(start->second.id == friId)   return true; } return false;}list<Info> BuddyList::getBuddies() const{ /* pair<multimap<string,Info>::const_iterator,  multimap<string,Info>::const_iterator> its; its = mBuddies.equal_range(myInfo.id);   */   list<Info> buddies; multimap<string,Info>::iterator it; for(multimap<string,Info>::const_iterator it = mBuddies.begin(); it != mBuddies.end(); ++it)  buddies.push_back(it->second); return buddies;} -------------------------------------------------主函数.cpp----------------------------------------------------// 好友列表实现.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>#include "BuddyList.h"#include<string>#include<cstring>#include<vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ Info info1,info2; vector<BuddyList> usersBudList; cout<<"***********************请选择需要进行的操作******************"<<endl; cout<<"---------------建立所有用户好友列表(C/c)------------------"<<endl; cout<<"-------------------新增用户好友(I/i)----------------------"<<endl; cout<<"---------------查找指定用户所有好友(S/s)------------------"<<endl; cout<<"---------------删除指定用户某位好友(R/r)------------------"<<endl; cout<<"------------------------退出(E/e)-------------------------"<<endl; cout<<endl<<endl<<endl; char cmd; cin>>cmd; while(1) {  if(cmd=='C'||cmd=='c')  {   cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;   cout<<"请输入所有用户"<<endl;   cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;   while(1)   {    cout<<endl<<endl;    cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<<endl;    cout<<"请输入账号(以0结束):";    cin>>info1.id;    if(info1.id=="0")     break;    cout<<"请输入他的姓名:";    cin>>info1.name;    cout<<"请输入他的其他的信息:";    cin>>info1.otherInfo;    BuddyList buddyList;    buddyList.setMyInfo(info1);    ///////////////////////////////////////////////usersBudList.push_back(buddyList);    cout<<endl;    cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<<endl;    cout<<"请输入他所有好友的信息"<<endl;    while(1)    {     cout<<"**********************************"<<endl;     cout<<"请输入好友账号(以0结束):";     cin>>info2.id;     if(info2.id=="0")      break;     cout<<"请输入他的姓名:";     cin>>info2.name;     cout<<"请输入他的其他的信息:";     cin>>info2.otherInfo;     buddyList.addBuddy(info2);    }    usersBudList.push_back(buddyList);   }  }  else if(cmd == 'I' || cmd=='i')  {   cout<<endl<<endl;   string userId;   cout<<"****************************************"<<endl;   cout<<"请输入用户账号(以0结束):"<<endl;   cin>>userId;   if(userId=="0")    break;   vector<BuddyList>::iterator it1;   int i =0;   for( it1= usersBudList.begin(); it1 != usersBudList.end(); ++it1,++i)   {    if(it1->getMyInfo().id == userId)    {     cout<<endl;     cout<<"**********************************"<<endl;     cout<<"请输入新增好友的信息"<<endl;     Info info1;     while(1)     {      cout<<"**********************************"<<endl;      cout<<"请输入好友账号(以0结束):";      cin>>info1.id;      if(info1.id=="0")       break;      cout<<"请输入他的姓名:";      cin>>info1.name;      cout<<"请输入他的其他的信息:";      cin>>info1.otherInfo;      BuddyList *pBuddyList = &usersBudList.at(i);      //cout<<pBuddyList->getMyInfo().id<<endl;      if(pBuddyList->isBuddy(info1.id))      {       cout<<"他的好友列表中已存在此账号!"<<endl;       continue;      }      pBuddyList->addBuddy(info1);      cout<<"添加成功!"<<endl;     }     break;    }   }   if(it1 == usersBudList.end())     cout<<"无此账号的用户!"<<endl;  }  else if(cmd=='S'||cmd=='s')  {   cout<<endl<<endl;   string userId;   list<Info> userList;   while(1)   {    cout<<"****************************************"<<endl;    cout<<"请输入用户账号(以0结束):"<<endl;    cin>>userId;    if(userId=="0")     break;    vector<BuddyList>::iterator it1;    for( it1= usersBudList.begin(); it1 != usersBudList.end(); ++it1)    {     if(it1->getMyInfo().id == userId)     {      userList = it1->getBuddies();      if(userList.size()==0)      {       cout<<"此账号用户的好友列表为空!"<<endl;       break;      }      cout<<"他的好友有:"<<endl;      for(list<Info>::iterator it2 = userList.begin(); it2 != userList.end(); ++it2)      {       cout<<"账号:"<<it2->id<<"  姓名:"<<it2->name<<"  其他信息:"<<it2->otherInfo<<endl;      }      break;     }    }    if(it1 == usersBudList.end())     cout<<"无此账号的用户!"<<endl;   }  }  else if(cmd=='R'||cmd=='r')  {   cout<<endl<<endl;   string userId;   string friId;   list<Info> userList;   while(1)   {    cout<<"****************************************"<<endl;    cout<<"请输入用户账号(以0结束):"<<endl;    cin>>userId;    if(userId=="0")     break;    vector<BuddyList>::iterator it1 = usersBudList.begin();    for(; it1 != usersBudList.end(); ++it1)    {     if(it1->getMyInfo().id == userId)     {      cout<<endl;      cout<<"****************************************"<<endl;      cout<<"请输入需要删除的好友的账号:"<<endl;      cin>>friId;      bool flag = it1->remove(friId);      if(flag)       cout<<"删除成功!"<<endl;      else       cout<<"他的好友中没有此账号!"<<endl;      break;     }    }    if(it1 == usersBudList.end())     cout<<"无此账号的用户!"<<endl;   }  }  else if(cmd=='E'||cmd=='e')  {   break;  }  else  {   cout<<"输入命令不正确!请重新输入!"<<endl;  }  cout<<"*************************************************************"<<endl;  cout<<"***********************请选择需要进行的操作******************"<<endl;  cout<<"*************************************************************"<<endl;  cout<<endl<<endl<<endl;  cin>>cmd; } system("pause"); return 0;} ----------------------------------------------程序测试---------------------------------------------------------***********************请选择需要进行的操作******************---------------建立所有用户好友列表(C/c)-------------------------------------新增用户好友(I/i)-------------------------------------查找指定用户所有好友(S/s)---------------------------------删除指定用户某位好友(R/r)------------------------------------------退出(E/e)------------------------- c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%请输入所有用户%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请输入账号(以0结束):2008550820请输入他的姓名:heyong请输入他的其他的信息:cs&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请输入他所有好友的信息**********************************请输入好友账号(以0结束):0894042210请输入他的姓名:luoyao请输入他的其他的信息:ac**********************************请输入好友账号(以0结束):2008550802请输入他的姓名:zhouqian请输入他的其他的信息:cs**********************************请输入好友账号(以0结束):2008552980请输入他的姓名:lina请输入他的其他的信息:sw**********************************请输入好友账号(以0结束):0 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请输入账号(以0结束):0894042210请输入他的姓名:luoyao请输入他的其他的信息:ac&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请输入他所有好友的信息**********************************请输入好友账号(以0结束):0897508652请输入他的姓名:liuhuan请输入他的其他的信息:tg**********************************请输入好友账号(以0结束):0812345678请输入他的姓名:lijun请输入他的其他的信息:tf**********************************请输入好友账号(以0结束):0 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&请输入账号(以0结束):0************************************************************************************请选择需要进行的操作******************************************************************************* i ****************************************请输入用户账号(以0结束):0894042210**********************************请输入新增好友的信息**********************************请输入好友账号(以0结束):2008550819请输入他的姓名:lixun请输入他的其他的信息:cs0894042210添加成功!**********************************请输入好友账号(以0结束):2008550820请输入他的姓名:heyong请输入他的其他的信息:cs0894042210添加成功!**********************************请输入好友账号(以0结束):2008550820请输入他的姓名:heyong请输入他的其他的信息:cs0894042210他的好友列表中已存在此账号!**********************************请输入好友账号(以0结束):0************************************************************************************请选择需要进行的操作******************************************************************************* s ****************************************请输入用户账号(以0结束):2008550820他的好友有:账号:0894042210  姓名:luoyao  其他信息:ac账号:2008550802  姓名:zhouqian  其他信息:cs账号:2008552980  姓名:lina  其他信息:sw****************************************请输入用户账号(以0结束):0894042210他的好友有:账号:0897508652  姓名:liuhuan  其他信息:tg账号:08123456  姓名:lijun  其他信息:tf账号:2008550819  姓名:lixun  其他信息:cs账号:2008550820  姓名:heyong  其他信息:cs****************************************请输入用户账号(以0结束):2008550819无此账号的用户!****************************************请输入用户账号(以0结束):0************************************************************************************请选择需要进行的操作******************************************************************************* r ****************************************请输入用户账号(以0结束):0894042210****************************************请输入需要删除的好友的账号:08123456删除成功!****************************************请输入用户账号(以0结束):0************************************************************************************请选择需要进行的操作******************************************************************************* s ****************************************请输入用户账号(以0结束):0894042210他的好友有:账号:0897508652  姓名:liuhuan  其他信息:tg账号:2008550819  姓名:lixun  其他信息:cs账号:2008550820  姓名:heyong  其他信息:cs****************************************请输入用户账号(以0结束):0************************************************************************************请选择需要进行的操作www.2cto.com******************************************************************************* w输入命令不正确!请重新输入!************************************************************************************请选择需要进行的操作******************************************************************************* e请按任意键继续. . .