2011-12-19 2 views
2

vC++で汎用ハッシュマップを作成するにはどうすればよいですか?私は言語オプションとしてVisual StudioとVC++を使用しています。私は実装をヘッダー(インターフェース)とcppファイルに分けたいと思っています。 ヘッダー:C++で汎用ハッシュマップを作成する方法は?

template<class T1,class T2> 
class Generic 
{ 
    map<T1,T2> m1; 

    public: 

    // Standard constructors and destructors 
    // ------------------------------------- 
    Generic(); 
    virtual ~Generic(); 

    // Copy constructor and equal operator 
    // ----------------------------------- 
    Generic (Generic &); 
    Generic& operator=(Generic&); 

    void insert(const T1& key,const T2& value); 
    T2 lookup(const T1&key); 


}; 

と私のcppファイル:私はここで間違いを犯していますかどうかを疑問に思って

MyGeneric::Generic() 
{ 
} 

//----------------------------------------------------------------------------- 
// Generic : destructor 
//----------------------------------------------------------------------------- 
Generic::~Generic() 
{ 
} 

//----------------------------------------------------------------------------- 
// Generic : copy constructor 
//----------------------------------------------------------------------------- 
Generic::Generic(Generic& original) 
{ 
} 

//----------------------------------------------------------------------------- 
// Generic : equal operator 
//----------------------------------------------------------------------------- 
Generic& Generic::operator=(Generic& original) 
{ 
    return *this; 
} 
void Generic::insert(const T1& key,const T2& value) 
{ 
} 
T2 Generic::lookup(const T1&key) 
{ 
} 

。私は私のcppファイルでテンプレートを定義していないので、その使用法についても混乱しています。それは問題ですか?ハッシュマップで対応するキーの単一の値を削除するにはどうすればよいですか?

+6

'std :: hash_map'または' std :: unordered_map'の何が問題なのですか? –

+0

@Cody、それらを一般的に使うことはできますか?私は、その中にどのような種類のキー値も格納できる単一のマップオブジェクトが必要なことを意味します。ちょうどキーとその型に基づいて私はそのキーにバインドされている型の値を取得する必要があります。私はこのロジックを使用するつもりはない、私のプログラムは間違いなく厄介になります.. – user1061293

+0

@ user1061293:どちらもテンプレートベースの汎用標準ライブラリコンテナ本質的にホイールを再発明しようとしている。 –

答えて

2

タイプが必要です。をご覧ください。それは、あなたが望むどんなタイプでも保存し、検索することを可能にします。もちろん、std::unordered_mapのようなシーケンスやマップと組み合わせて使用​​することもできます。

自分で実装すること自体は面倒です。私を信じて、私は試しました:)

+0

私は同意します。自分でバリアント型を実装するのは非常に不愉快です。 –

+0

@all、このようなものはC++にありますか? var j; j = 10; j = "Student"; j = new MyClass; このようなC++に汎用変数がありますか? – user1061293

+2

私の答えでは、私はBoostライブラリ**の変種**へのリンクを投稿しました。これは、必要な機能を提供します。そして、いいえ、これをC++で行うための型安全な組み込み*方法はありません。 – Constantinius

関連する問題