вставка элемента в unordered_map дает ошибку

Я определил unordered_map как это

struct pht {
  pht(int t, vector pat) 
: tag(t), pattern(32) {}
private:
  int tag;
  vector pattern;
};

unordered_map< pair, pht > predictor;

int main()
{
  int pc, addr, offset, tag;
  vector 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' 

как я могу зафиксировать это?

0
nl ja de
Я следовал как пример в cplusplus.com/reference/unordered_map/unordered_map/insert
добавлено автор mahmood, источник
Я обновил почту
добавлено автор mahmood, источник
Проблема состоит в том что вы didn' t читают документацию...
добавлено автор Lightness Races in Orbit, источник
@mahmood: Нет вы didn' t...
добавлено автор Lightness Races in Orbit, источник
predictor.insert ( ожидает станд.:: пара <станд.:: пара <интервал, интервал>, PHT> как параметр, не ключ, сопровождаемый стоимостью.
добавлено автор Mooing Duck, источник
Пожалуйста, в следующий раз отправляют , полный, минимальный код. Твой по крайней мере испытывает недостаток в нескольких заголовках и немного использование заявления, делая его излишне трудно, чтобы воспроизвести вашу проблему.
добавлено автор Konrad Rudolph, источник

1 ответы

The error message is misleading; the real reason is that there’s no std::hash specialisation for std::pair which is required by unordered_map. You need to either provide this specialisation or (recommended) create an unordered_map which specifies a custom hasher:

struct hash_pair {
    template 
    std::size_t operator ()(std::pair const& p) const {
        using std::hash;
        return hash()(p.first) ^ hash()(p.second);
    }
};

И затем объявите карту как:

unordered_map, pht, hash_pair> predictor;
5
добавлено
добавлено автор Mooing Duck, источник
@MooingDuck Имеет смысл.
добавлено автор Konrad Rudolph, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest