`
datoplay
  • 浏览: 1614994 次
文章分类
社区版块
存档分类
最新评论

用vector、 multimap、 list容器实现好友列表的各种操作 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
*************************************************************
***********************请选择需要进行的操作******************
*************************************************************

w
输入命令不正确!请重新输入!
*************************************************************
***********************请选择需要进行的操作******************
*************************************************************

e
请按任意键继续. . .

分享到:
评论

相关推荐

    C++顺序容器,容器适配器,关联容器的操作

    包括顺序容器vector,string,list,forward,deque ,array;容器适配器stack,queue,priority_queue以及关联容器map,set,multimap,unordered_multimap等的增删查改操作。

    C++模板(vector、map、multimap、set、multiset)

    一共四个doc文件,list综合实例、multimap和map的实例、set和multiset的综合实例、vector综合实例

    c++容器类&QT;容器

    C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等;后者包括set,map,multiset,multimap等。 常用函数介绍等. 若需要存储的元素数在编译器间就可以确定,可以使用数组来...

    STL容器使用代码

    c++ STL容器使用代码,方便学习 vector string deque queue list set map multiset multimap 容器的API使用方法等

    c++中容器之总结篇

    C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中有包含有顺序容器适配器。 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。主要有vector、list、deque(双端队列...

    细讲c++ 各种STL容器的应用场合及性能

    c++ std stl各容器的应用场合及性能 map hash_map unordered_map multimap list forward_list vector set hash_set multiset unsorted_set queue deque priority_queue

    C++ STL开发技术导引(第5章)

    4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 ...

    C++ STL 开发技术导引(随书源码)

    本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,通过大量的源码分析和应用实例,详细介绍了C++ STL的技术原理和使用方法。...

    c++容器使用经验

    标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。

    本例程提供了C++的STL常用数据结构及其算法的使用范例,比如vector、string、list

    本例程提供了C++的STL常用数据结构及其算法的使用范例,比如vector、string、list、forward_list、deque、queue、stack、map、set、multimap、multiset、tuple、bitset的使用范例,以及algorithm常….zip

    C++进阶课程讲义_v1.0.4.pdf

    8.2 C++异常处理的实现 35 8.2.1异常基本语法 35 8.2.2栈解旋(unwinding) 39 8.2.3异常接口声明 40 8.2.4异常类型和异常变量的生命周期 40 8.2.5异常的层次结构(继承在异常中的应用) 46 8.3标准程序库异常 47 8.4...

    C++容器类的简单介绍.doc

    顺序性容器 vector 相当与数组,从后面快速的插入与删除,直接访问任何元素 deque 双队列,从前面或后面快速的插入与删除,直接访问任何元素 list 双链表,从任何地方快速插入与删除 关联容器 set 快速查找,不...

    C++ STL 开发技术导引(第6章)

    4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 ...

    MyStl:自己实现STL

    顺序容器:vector,list,deque 顺序容器适配器:stack,queue 关联容器:set,map,multiset,multimap 无序关联容器:unordered_set,unordered_map,unordered_multiset,unordered_multimap 容器均支持列表初始...

    Programming with C++

    Chapter 22: Sequence Containers–vector, list and deque 532 Chapter 23: Associative Containers–set, multiset, map and multimap 559 Chapter 24: Bit Sets 578 Chapter 25: Algorithms 589 REFERENCES 625 ...

    C++Primer视频(中级)下载地址

    第9章 顺序容器 - STL list 3.第9章 9.7 容器适配器 - 栈适配器 4.第9章 9.7 容器适配器 - 队列 5.第9章 9.7 容器适配器 - 优先级队列 6.第9章 9.1 顺序容器的定义 7.第9章 9.2 迭代器和迭代器范围 8.第...

    C++ STL开发技术导引(第3章)

    4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 ...

    C++标准程序库STL的架构

    6.8.1 各种容器的使用时机 61 7 STL迭代器 64 7.1 迭代器头文件 64 7.2 迭代器类型 64 7.2.1 Input迭代器 64 7.2.2 Output迭代器 64 7.2.3 Forward迭代器 65 7.2.4 双向迭代器 65 7.2.5 随机存取迭代器 65 7.2.6 ...

    C++标准模版库使用简介

    目录 一、 模板简单介绍: 3 1. 函数模板 3 ...1.1 Vector 7 1.2 List 16 2. 关联式容器: 22 2.1 Set 22 2.2 multiset 24 2.3 map 27 2.4 multimap 29 五、 写在后面 34 六、 附录:如何选择容器 34

Global site tag (gtag.js) - Google Analytics