gpt4 book ai didi

结构散列的 C++ 无序集问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:06:03 25 4
gpt4 key购买 nike

<分区>

我是 C++ 的新手,感觉自己不知所措。我正在尝试创建一个可以使用模板获取任何类型数据的图形结构。这是c_graph.h

#pragma once
#include <vector>
#include <unordered_map>
#include <unordered_set>

template <class T> class c_graph {
private:
std::unordered_map<T,std::unordered_set<T>> adj_matrix;

public:
'' GRAPH OPERATIONS OMITTED ''
};

template <class M> struct node {
public:
M val;

node() {

}

node(M v) {
val = v;
}
};

我想支持直接使用数据(因此在图表上使用模板 T),或将数据包装在节点结构中,该结构定义在底部。我使用节点结构的原因是有时您希望图中的不同节点具有相同的数据,如果没有数据包装器,这将无法与邻接矩阵外部的 unordered_map 一起使用。

但是我遇到了 unordered_set 类的问题。它没有节点的哈希函数。我在网上读到了这个问题,解决方案似乎是这样的

namespace std {
template <class M> class hash<node<M>> {
public:
size_t operator()(const node<M> &n) const
{
return reinterpret_cast<size_t>(&n);
}
};
};

我有另一个 .cpp 文件正在尝试使用 c_graph<node<char>>

但是对于我来说,我无法编译我的代码。我尝试将散列代码段放在 c_graph.h 中,但出现了一堆链接器错误

error LNK2019: unresolved external symbol "public: void __thiscall c_graph<struct node<char> >::add_node(struct node<char>)"... 

我已经尝试将它放在 c_graph.cpp 中,在那里我得到

error C2338: The C++ Standard doesn't provide a hash for this type.

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com