C++ 使用指针将STL集合中的指针转换为迭代器/std::集合中的删除元素

C++ 使用指针将STL集合中的指针转换为迭代器/std::集合中的删除元素,c++,pointers,stl,iterator,set,C++,Pointers,Stl,Iterator,Set,我有一个集合,它在堆上存储大量(超过50k)双类型值: struct user { int id; double score; } set <user*, user_comparator_descending_score> USERS = new set ... struct用户{ int-id; 双倍得分; } 设置用户=新设置。。。 我还创建了一个 map<key, list of pointers to elements in the aforementio

我有一个集合,它在堆上存储大量(超过50k)双类型值:

struct user {
  int id;
  double score;
}

set <user*, user_comparator_descending_score> USERS = new set ...
struct用户{
int-id;
双倍得分;
}
设置用户=新设置。。。
我还创建了一个

map<key, list of pointers to elements in the aforementioned set>
map
就是

map<id, vector<user*> > = new map...
map=新映射。。。
现在,我想删除此地图中键指向的元素。我会使用
set::erase
函数,但它只接受指向要擦除的元素的迭代器。使用
delete(pointer)
从集合中删除对象是否正确?我对此很不确定,因为set不使用连续内存


我的问题的其他解决方案也将受到高度赞赏。我将集合按值的降序排序。我需要在
O(logN)
中插入和删除。但是,请注意,删除不是通过集合中的值,而是通过其他键。

显示集合的定义。不清楚您要查找的内容,但可能您要查找的是
set::erase(*pointer)
?只需将地图存储设置为迭代器,而不是指针。如果需要,您可以很容易地从迭代器指向指针(如,
&*iter
),但您不能走另一条路。@IgorTandetnik在多次插入之后,迭代器是否仍然指向同一元素,从而在底层红黑树中进行多次调整?是的。插入和擦除元素时,集合迭代器不会失效(当然,迭代器指向的元素被擦除时除外)。