ハッシュテーブルを書いていますが、困難に直面しました。マップのように、標準コンテナー (ベクター、リストなど) の内容で初期化したい:
map <string,int> m(a.begin(),a.end())
クラスの次の定義があります: template <class key,class val,class hashik=std_hash> class hash_table
。
そして、コンストラクターを定義します。
template <template <class> class C> hash_table(typename C<pair <key,val> >::iterator first,typename C<pair <key,val> >::iterator last)
{
init();
for(pair <key,val>* it=first;it!=last;++it)
this->operator[](it->first)=it->second;
}
しかし、それはコンパイルされません。呼び出しに一致する関数がありません。例えば:
vector <pair <string,int> > a;
...
hash_table <string,int> m(a.begin(),a.end()); //compilation error
私は何を間違っていますか?また、テンプレートに関するどの本を読むようにアドバイスしてもらえますか?