具有同一类指针 std::unordered_set 的类

问题描述 投票:0回答:1

我正在尝试创建一个包含指向同一类的

std::unordered_set
指针的类,但我无法找到在声明该类之前准备哈希函数的方法。

struct hash
{
   inline std::size_t operator()(Vertex const * & other);
};

struct Vertex
{
    // ...
    double x, y, z;
    std::unordered_set<Vertex *, hash> touching;
};

inline std::size_t hash::operator()(Vertex * const & other) const
{
    return ((hash<double>()(other->x))>>1)^
            ((hash<double>()(other->y))   )^
            ((hash<double>()(other->z))<<1);
}
c++ class c++11 unordered-set
1个回答
2
投票

我假设您的意思是

std::hash
,在
hash::operator()
中,如果是这样,请指定完整范围并包括
<functional>
。然后都需要
Vertex
类的前向声明,然后一切都好

#include <unordered_set>
#include <functional>  // std::hash

struct Vertex;  // forward declare the `Vertex` 

struct hash
{
   std::size_t operator()(Vertex* other) const;
};

struct Vertex
{
   double x, y, z;
   std::unordered_set<Vertex*, ::hash> touching;
};

std::size_t hash::operator()(Vertex* other) const
{
   return ((std::hash<double>()(other->x)) >> 1) ^
      ((std::hash<double>()(other->y))) ^
      ((std::hash<double>()(other->z)) << 1);
}

另请注意,您不需要获取指针的

const
-ref(即
Vertex const*& other
),只需 按原始类型的值传递它

© www.soinside.com 2019 - 2024. All rights reserved.