Вставка элемента в unordered_map дает ошибку
Я определил unordered_map
как это
struct pht {
pht(int t, vector<bool> pat)
: tag(t), pattern(32) {}
private:
int tag;
vector<bool> pattern;
};
unordered_map< pair<int, int>, pht > predictor;
int main()
{
int pc, addr, offset, tag;
vector<bool> pat;
srand(time(0));
tag = 1000; pc = 100; offset = 10;
for ( int i = 0; i < 32; i++ )
pat.push_back( rand() % 2 );
predictor.insert(make_pair( make_pair(pc, offset), pht(tag, pat) ) );
return 0;
}
Однако я получаю эту ошибку:
(ОБНОВЛЕНО)
error C2440: 'type cast' : cannot convert from 'const std::pair<_Ty1,_Ty2>' to 'size_t'
как я могу это исправить?
1 ответ
Решение
Сообщение об ошибке вводит в заблуждение; настоящая причина в том, что нет std::hash
специализация для std::pair<int, int>
что требуется unordered_map
, Вы должны предоставить эту специализацию или (рекомендуется) создать unordered_map
который указывает пользовательский хеш:
struct hash_pair {
template <typename T, typename U>
std::size_t operator ()(std::pair<T, U> const& p) const {
using std::hash;
return hash<T>()(p.first) ^ hash<T>()(p.second);
}
};
А затем объявить карту как:
unordered_map<pair<int, int>, pht, hash_pair> predictor;