Повысить мультииндексность :Составной ключ vector и int для хэшированных индексов
-
19-09-2019 - |
Вопрос
как я только что узнал в в моем другом вопросе, Я мог бы использовать composite_key
для структуры, которая имеет std::vector
и целое число.Теперь мой вопрос заключается в следующем:Могу ли я как-то использовать это для работы с hashed_indecies?
Вот пример, подобный ЭТО:
struct unique_property
{
//the pair of int and std::vector<int> shall be unique
int my_int;
std::vector<int> my_vec;
};
typedef multi_index_container<
unique_property,
indexed_by<
hashed_unique< // indexed by my_int and every entry of my_vec
composite_key<
street_entry,
member<unique_property,int,&unique_property::my_int>,
member<unique_property,std::vector<int>,&unique_property::my_vec>
>
>,
random_access< >
>
> property_locator;
Проблема в том (конечно), что std::vector<int>
нет подходящего хэш-ключа.Могу ли я поместить этот код в элегантную оболочку (или что-то в этом роде), чтобы создать хэш-ключ из каждой записи my_vec
также?
Решение
Используйте фрагмент кода из вашего предложения здесь.Это должно сработать.Я добавил туда свои комментарии.
Другие советы
Если вы хотите, чтобы вектор был хэшируемым, вы можете просто написать hash<vector<int> >
функция в namespace std
, делая его хэшем , как вам заблагорассудится (подсказка:возможно, вам удастся избежать хеширования только первых нескольких элементов в некоторых приложениях).Это должно сделать std::hash_set<vector<int> >
работайте, и я думаю, что ваш более сложный контейнер тоже.