用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
請輸入他的其他的信息:cs
0894042210
添加成功!
**********************************
請輸入好友賬號(以0結束):2008550820
請輸入他的姓名:heyong
請輸入他的其他的信息:cs
0894042210
添加成功!
**********************************
請輸入好友賬號(以0結束):2008550820
請輸入他的姓名:heyong
請輸入他的其他的信息:cs
0894042210
他的好友列表中已存在此賬號!
**********************************
請輸入好友賬號(以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
請按任意鍵繼續. . .
作者 heyongluoyao8