Boost Multi-Index: составной ключ вектора и int для хешированных индексов - PullRequest
0 голосов
/ 09 ноября 2009

, как я только что узнал в в моем другом вопросе , я мог бы использовать 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?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2009

Если вы хотите, чтобы вектор был хэшируемым, вы можете просто написать функцию hash<vector<int> > в namespace std, сделав ее хеш-код, как вам угодно (подсказка: вы можете избежать хэширования только первых нескольких элементов в некоторых Приложения). Это должно заставить std::hash_set<vector<int> > работать, и я думаю, что ваш более сложный контейнер также.

0 голосов
/ 09 ноября 2009

Используйте фрагмент кода из вашего предложения здесь . Он должен работать. Я добавил туда свои комментарии.

...