如何插入一组?

时间:2018-03-22 02:39:34

标签: c++ insert set

我知道显而易见的方法是使用insert函数。我想要做的是将电话号码放入电话地图和电话号码集中。它可以将它放入地图中,但是当它到达phone_numbers时设置它会出现故障。 Add_Phone函数和Phone映射位于名为Code_Processor

的类中
class User {
  public:
   string username;
   string realname;
   int points;
   set <string> phone_numbers;
};

map <string, User *> Phones;

int Code_Processor::Add_Phone(string username, string phone) {
    //register the given phone # with given user
    //put the phone on both Phones map and phone_numbers set
    //use .insert()
    User *nUser = new User;
    map <string, User *>::iterator nit;
    nit = Phones.find(username);

    Phones.insert(make_pair(username, nUser));  //put into Phones map
    nit->second->phone_numbers.insert(phone);    //this is where is seg faults!! 


    return 0;
}

1 个答案:

答案 0 :(得分:2)

在插入地图之前搜索username,如果用户不存在,那么nit将是end迭代器,不应该取消引用。如果您取消引用它(就像您那样)那么您将拥有undefined behavior

相反,要解决您的问题,请依赖insert函数将迭代器返回到插入元素的事实。

然后你可以做类似

的事情
auto inserted_pair = Phones.insert(make_pair(username, nUser));
if (inserted_pair.first != Phones.end())
{
    inserted_pair.first->phone_numbers.insert(phone);
}