我有两个结构体,它们相互指向
struct Person{
string name;
string born;
int age;
Id* p_id;
};
struct Id{
string id_number;
Person* p_person;
};
这些结构被存储在称为vec_id和vec_person的那些结构的两个ponter向量中。我需要在vec_person中找到Person的函数,然后删除vec_id中匹配的ID。我的问题是将p_id转换为指针。
我的代码示例:
std::vector<Person*> vec_person;
std::vector<Id*> vec_id;
vector <Person*>::iterator lowerb=std::lower_bound (vec_person.begin(), vec_person.end(), Peter, gt);
//gt is matching function which is defined elsewhere
//peter is existing instance of struct Person
// lowerb is iterator, that works fine.
vec_id.erase((*lowerb)->p_id);
//gives error: no matching function for call to ‘std::vector<Person*>::erase(Person*&)’|
//if i can convert pointer (*low)->pnumber to iterator, it would be solved(i guess).
Thx for help
4条答案
按热度按时间11dmarpk1#
要将迭代器
it
转换为指针,请使用表达式&*it
。将指针转换为int右值(e.例如,...)转换为
vector<int>::iterator
,使用声明:093gszye2#
你不能只是把一个值(这里是指针)“转换”成一个迭代器。你必须搜索向量中的值并删除它。你可以使用std::remove_if算法从一个范围中删除某些值。如果每个Person都链接到一个id,或者可能使用不同的容器(如map),您也可以考虑不保留两个向量。
ct2axkht3#
我刚找到这个解决办法
2fjabf4q4#