C ++ Как я могу использовать unordered_map с пользовательским ha sh и сравнивать как переменную-член, если эти функции передаются в Конструкторе? - PullRequest
2 голосов
/ 26 апреля 2020

Предположим, у меня есть этот класс

class C {
private:
    std::unordered_map<struct MyStruct, int> map;
public:
    C(size_t(*hash)(const struct MyStruct &t1), bool(*comp)(const struct MyStruct &t1, const struct MyStruct &t2);
}

Как я могу использовать указатели функций в моем unordered_map, но при этом иметь карту в качестве переменной-члена? Потому что в то время, когда я получаю эти указатели на функции в Конструкторе, карта уже создана.

1 Ответ

2 голосов
/ 26 апреля 2020

Учитывая тот факт, что вы пометили свой Q с C ++ 14, я опубликую свой ответ с std::function s вместо указателей на функции. Вы можете написать свой класс C следующим образом:

using hash_t = std::function<size_t(const struct MyStruct &t1)>;
using comp_t = std::function<bool(const struct MyStruct &t1, const struct MyStruct &t2)>;

class C 
{
private:
   std::unordered_map<struct MyStruct, int, hash_t, comp_t> map;

public:
   C(int bucket_size, hash_t hasher, comp_t comper) :
      map(bucket_size, hasher, comper)
   {
   }
};

, а затем создать экземпляр класса с необходимыми параметрами. Смотрите live демо здесь.

...