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

2014-11-24 12:36:24 · 作者: · 浏览: 4

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

--------------------------------------------------BuddyList.h------------------------------------------------#include

#include

#include

//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 getBuddies() const;

protected:

multimapmBuddies;

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::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::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 BuddyList::getBuddies() const

{

/*

pair::const_iterator,

multimap::const_iterator> its;

its = mBuddies.equal_range(myInfo.id);

*/

list buddies;

multimap::iterator it;

for(multimap::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

#include "BuddyList.h"

#include

#include

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

Info info1,info2;

vector usersBudList;

cout<<"***********************请选择需要进行的操作******************"<

cout<<"---------------建立所有用户好友列表(C/c)------------------"<

cout<<"-------------------新增用户好友(I/i)----------------------"<

cout<<"---------------查找指定用户所有好友(S/s)------------------"<

cout<<"---------------删除指定用户某位好友(R/r)------------------"<

cout<<"------------------------退出(E/e)-------------------------"<

cout<

char cmd;

cin>>cmd;

while(1)

{

if(cmd=='C'||cmd=='c')

{

cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<

cout<<"请输入所有用户"<

cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<

while(1)

{

cout<

cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<

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<

cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<

cout<<"请输入他所有好友的信息"<

while(1)

{

cout<<"**********************************"<

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<

string userId;

cout<<"****************************************"<

cout<<"请输入用户账号(以0结束):"<

cin>>userId;

if(userId=="0")

break;

vector::iterator it1;

int i =0;

for( it1= usersBudList.begin(); it1 != usersBudList.end(); ++it1,++i)

{

if(it1->getM