#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;
}
输出: