#include <iostream>
#include <string>
#include <map>
using namespace std;
//用户
class User
{
public:
User(int id, string name)
{
this->id = id;
this->name = name;
}
void show()
{
printf("id = %d, name = %s\n", id, name.c_str());
}
private:
int id;
string name;
};
//管理类
class UserManager
{
public:
void add(int id, string name, string group = "默认分组")
{
//创建一个用户
User * u= new User(id, name);
_m.insert(make_pair(group, u));
}
//删除一个用户
void _delete()
{
_m.erase(_m.begin());
//delete[] User;
}
//修改用户
void change(int id, string name, string group = "默认分组")
{
_delete();
add(id,name,group);
}
void show()
{
multimap<string, User*>::iterator it = _m.begin();
while (it != _m.end())
{
it->second->show();
it++;
}
}
void show2()
{
multimap<string, User*>::iterator it = _m.begin();
while (it != _m.end())
{
printf ("%s ", it->first.c_str());
it->second->show();
it++;
}
}
void show(string group)
{
pair<multimap<string, User*>::const_iterator, multimap<string,
User*>::const_iterator> ret = _m.equal_range(group);
multimap<string, User*>::const_iterator start = ret.first;
multimap<string, User*>::const_iterator end = ret.second;
cout << group << ": " << endl;
while (start != end)
{
start->second->show();
start++;
}
}
private:
// :
multimap<string, User*> _m;
};
void menu()
{ //增删改查
printf("1 添加用户\n");
printf("2 显示用户\n");
printf("3 按分组显示\n");
printf("4 显示某一组用户\n");
printf("5 删除用户\n");
printf("6 修改用户\n");
}
//增加用户
void add(UserManager &um)
{
um.add(1, "小明1", "家庭");
um.add(8, "小明8", "好友");
um.add(10, "小明10", "朋友");
um.add(6, "小明6");
um.add(7, "小明7","家庭");
um.add(3, "小明3","好友");
}
//修改用户
void change(UserManager &um)
{
um.change(8, "小明88", "好友");
}
int main()
{
UserManager um;
char cmd[10];
while (1)
{
menu();
fgets(cmd, 10, stdin);
switch (cmd[0])
{
case '1':
add(um); //添加好友
break;
case '2':
um.show(); //显示用户
break;
case '3':
um.show2(); //按分组显示
break;
case '4':
um.show("好友"); //显示某一组用户
break;
case '5':
um._delete(); //删除用户
case '6':
change(um); //修改用户
default:
break;
}
}
return 0;
}
输出: