我知道显而易见的方法是使用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;
}
答案 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);
}