C++ 循环依赖与邻接表表示的混淆

标签 c++ adjacency-list cyclic-reference

很抱歉我对 C++ 缺乏经验,但我花了一些时间解决循环依赖问题,因此提出了这个问题。

我正在尝试用 C++ 表示邻接表。

我有结构节点

struct Node{

    int data;
    unordered_set<Node, Hash> links;

    bool operator == (Node const& other) const{
        return (data == other.data);
    }

    Node(){
    }

    Node(int data){
        this->data = data;
    }
};

我有我的 Hash 仿函数

struct Hash {
    size_t operator()(const Node &node) const {
        return node.data;
    };
};

我注意到 Hash 使用 NodeNode 使用 Hash
如果出于本练习的目的,我想在一个文件中声明所有内容,我应该先声明哪个文件。

我尝试对 HashNode 进行前向声明,先定义它们中的任何一个,但都没有编译。

PS:这不是作业,我是想在线解图算法题

最佳答案

延迟定义 Hash::operator() 直到定义 Node 并在 Hash 之前声明 Node。您可以引用不完整的类型,只要您不对其进行任何操作即可。

class Node;

class Hash{
    public:
        size_t operator()(const Node &node) const;
};

class Node{
    public:
        int data;
        unordered_set<Node, Hash> links;
};

inline size_t Hash::operator()(const Node &node) const{
    return node.data;
}

关于C++ 循环依赖与邻接表表示的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910892/

相关文章:

python - 在 Python 中,循环引用的引用计数是多少,为什么?

c++ - C++中函数重载的混淆

c++ - NetUserAdd() 成功,但用户为 "invisible"

c - 用 C 实现 2D 网格网络(图)及其邻接矩阵

boost - 压缩稀疏行矩阵与邻接表

mysql - 有多少个 "entities"在这个层次结构之下。嵌套集/邻接(英国境内有多少个 POI)

java - JDK13 垃圾收集无法正常工作。一些取消引用的对象没有被垃圾收集

C++ 如何在不使用 static_cast 或 dynamic_cast 的情况下从基类指针访问派生类成员?

c++ - iconv编码转换问题

javascript - 检测对象A中的循环引用是否与对象B中的循环引用在结构上相同