用STL中multimap编写简易的通讯录

#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;

}

输出:

猜你喜欢

转载自blog.csdn.net/xiaonan153/article/details/81261018