私はC++には比較的新しいので、頭の中にいるように感じます。私は、テンプレートを使用して任意の種類のデータを取ることができるグラフ構造を作成しようとしています。ここで私は(グラフ上したがってテンプレートT)データを直接使用して、または下部に定義されたノード構造体でデータをラップサポートしたい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;
}
};
あります。ノード構造体の私の理由は、グラフ内の異なるノードにデータラッパーを持たない隣接行列の外側の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ファイルを持っていますコンパイルします。私は、リンカエラー
error LNK2019: unresolved external symbol "public: void __thiscall c_graph<struct node<char> >::add_node(struct node<char>)"...
の束を得るc_graph.h内部ハッシュスニペットを、置く試みたと私は私が
error C2338: The C++ Standard doesn't provide a hash for this type.
を処分した、あなたのハッシュ関数は無効である:それは同じであるノードごとに異なる結果を与える可能性があります。 – emlai
Nitpick。 'reinterpret_cast'でハッシュしようとするのは良い考えではありません。 – WhiZTiM
同じデータを持つインスタンスが異なるハッシュ値を持つように構造体をハッシュするにはどうすればよいでしょうか? –