使用带有shared_ptr键的unordered_set

Ren*_*sch 2 c++ boost shared-ptr unordered-set

我想在我的程序中使用以下数据集合:

boost::unordered_set<boost::shared_ptr<Entity> > _entities;
Run Code Online (Sandbox Code Playgroud)

我正在使用unordered_set,因为我希望快速插入和删除(通过键,而不是迭代器)实体.

我怀疑的是,如果我实现以下两个功能:

void addEntity(boost::shared_ptr<Entity> entity) {
    _entities.insert(entity);
}
void removeEntity(boost::shared_ptr<Entity> entity) {
    _entities.remove(entity);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试删除实体时,unordered_set会找到它吗?因为存储在unordered_set中的shared_ptr是我试图用来从unordered_set中删除实体的shared_ptr的副本,如果我调用removeEntity()的话.

我需要为unordered_set找到实体做什么?我是否需要创建一个比较函数来检查shared_ptr的值?但是,unordered_set不会因为散列函数使用shared_ptr作为散列而减速吗?我是否需要创建一个使用实体作为哈希的哈希函数?

Raf*_*zuk 7

是的,你可以使用boost::shared_ptrboost::unordered_set(同样适用于这些的std类版本)

boost::unordered_set使用boost::hash模板函数生成密钥boost::unordered_set.此函数专门用于boost::shared_ptr考虑基础指针.

  • 如果两个共享指针包含相同的底层指针,则它们是相同的.如果你有两个相同但不相同的对象,它们将是不同的. (2认同)