1
我相对较新的C + +,我觉得我在我的脑海。我试图创建一个图表结构,可以通过使用模板来获取任何类型的数据。下面是c_graph.hC++无序集设置问题与结构哈希
#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);
}
};
};
我有尝试使用c_graph<node<char>>
但是我的生活,我不能让我的代码中的另一个.cpp文件编译。我试图把里面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.
顺便说一句,你的哈希函数是无效的:它可能会给出不同的结果为相等的节点。 – emlai
Nitpick。尝试通过'reinterpret_cast'进行散列并不是一个好主意。 – WhiZTiM
什么是散列结构的好方法,以便具有相同数据的实例具有不同的散列值? –