C++ 如何插入到集合中?
我知道最明显的方法是使用insert函数。我要做的是将给定的电话号码放入电话地图和电话号码集中。它可以把它放在地图上,但当它找到电话号码时,它会设置seg故障。Add_Phone函数和Phone map位于一个名为Code_Processor的类中C++ 如何插入到集合中?,c++,insert,set,C++,Insert,Set,我知道最明显的方法是使用insert函数。我要做的是将给定的电话号码放入电话地图和电话号码集中。它可以把它放在地图上,但当它找到电话号码时,它会设置seg故障。Add_Phone函数和Phone map位于一个名为Code_Processor的类中 class User { public: string username; string realname; int points; set <string> phone_numbers; }; map &l
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;
}
类用户{
公众:
字符串用户名;
字符串实名;
积分;
设置电话号码;
};
地图电话;
int Code_处理器::添加_电话(字符串用户名,字符串电话){
//向指定用户注册指定电话
//将手机放在手机地图和手机号码集上
//use.insert()
用户*用户=新用户;
迭代器nit;
nit=Phones.find(用户名);
insert(make_pair(用户名,用户));//放入电话地图
nit->second->phone_number.insert(phone);//这就是seg故障所在!!
返回0;
}
在插入地图之前搜索用户名
,如果用户不存在,则nit
将是不应取消引用的结束
迭代器。如果你去引用它(就像你做的那样),那么你就有了
相反,要解决您的问题,请依赖函数将迭代器返回给插入的元素这一事实
然后你可以做类似的事情
auto inserted_pair = Phones.insert(make_pair(username, nUser));
if (inserted_pair.first != Phones.end())
{
inserted_pair.first->phone_numbers.insert(phone);
}