2015-04-02 2 views
0

Я хочу, чтобы вы использовали unordered_map для памятки о функции f(row, int). К сожалению, я получаю странную ошибку компиляции (очень длинную и загадочную).Пара в качестве ключа карты для памятки

#include <vector> 
#include <unordered_map> 
#include <utility> 


using namespace std; 

typedef vector<bool> row; 

int main(void) { 

    unordered_map< pair<int, row>, int > x; 

} 
+1

Какая ошибка? Пожалуйста, вставьте. – Jagannath

ответ

2

Тип ключа для std::unordered_map должен иметь реализацию std::hash, я предполагаю, что ваша ошибка говорит вам, что std::pair<int, row> не имеет std::hash реализацию. Я не думаю, что стандарт определяет специализацию std::hash для std::pair, поэтому вам нужно будет предоставить свои собственные.

+0

Хорошо, спасибо. Любые идеи о том, как реализовать эффективную хеш-функцию для пары >? – joachim

+0

Стандарт требует специализации 'std :: hash' для' int' и 'std :: vector ', поэтому вам просто нужно как-то их комбинировать, возможно, в этом ответе: http://stackoverflow.com/questions/ 2590677/how-do-i-comb-hash-values-in-c0x - улучшена поддержка построения пользовательских хеш-функций для будущей версии стандарта, который я считаю. – mattnewport

Смежные вопросы