程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 用vector、 multimap、 list容器實現好友列表的各種操作 C++

用vector、 multimap、 list容器實現好友列表的各種操作 C++

編輯:C++入門知識

 

用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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved