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
什麼是散列結構的好方法,以便具有相同數據的實例具有不同的散列值? –