解决由于在哈希函数中使用不完整类型而导致的编译失败

时间:2019-10-28 13:55:43

标签: c++ hash

以下代码由于编译unordered_set的哈希函数时使用不完整类型Dir而无法编译。有没有办法解决这个问题。我猜想添加另一个类可能会解决此问题。但是解决这种情况的最佳实践是什么。

auto pred = [](const auto& v) {
                return std::hash<std::string>()(v.name);
            };

struct Dir{
    bool operator==(Dir const& other) {
        return name == other.name;
    }

    std::string name;
    std::unordered_set<Dir, decltype(pred)> down;
};

1 个答案:

答案 0 :(得分:0)

这解决了问题,看上去,唯一性,Dir的添加/删除都得到了照顾。但是我们需要紧密跟踪列表和unordered_map以确保其正常工作。不确定这是否是最好的方法。

struct Dir{
    std::string name;
    std::list<Dir> down;
    std::unordered_map<std::string, std::list<Dir>::iterator> downMap;
};