Я пишу хэш-таблицу, но сталкивался с трудностями. Я хочу инициализировать его содержимым стандартных контейнеров (вектор, список и т. Д.), Как карта:
map <string,int> m(a.begin(),a.end())
У меня следующее определение класса: template <class key,class val,class hashik=std_hash> class hash_table
.
И я определяю конструктор:Конструктор шаблонов с использованием итераторов STL
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
Что я делаю неправильно? А какие книги о шаблонах вы можете посоветовать мне читать?
Можете ли вы отправить [пример] (http://www.sscce.org/), что кто-то еще может попытаться скомпилировать? – Praetorian