Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > unordered_map и ключ-структура


Автор: VSB 13.1.2013, 21:38
Есть необходимость в LRU cache.
Пытаюсь приспособить для себя  http://timday.bitbucket.org/lru.html но есть проблема с тем, что ключом для внутреннего map или unordered_map должна быть такая структура.
Код

struct Coord
{
    Coord()
    {
        this->X=0;
        this->Y=0;
        this->Z=0;
    }
    Coord(long X, long Y, long Z)
    {
        this->X=X;
        this->Y=Y;
        this->Z=Z;
    }
    unsigned int X;
    unsigned int Y;
    unsigned char Z;
};


собственно вопрос, как для нее правильно написать хеш функцию или функцию сравнения (да и собственно, через что будет быстрее - map или unordered_map)


Приспособить в том плане, что а студии пока нет variadic templates и класс пришлось объявить так (жестко для unordered_map)
Код

template < 
    typename K, 
    typename V, 
    template<typename K,
        typename V,
        typename _Hasher = std::hash<K>,
        typename _Keyeq = std::equal_to<K>,
        class _Alloc = std::allocator<std::pair<const typename K, typename V> > >
    class MAP 
> class lru_cache_using_std 

Автор: Earnest 15.1.2013, 12:16
Функцию сравнения проще всего (и быстрее) написать через memcmp - у тебя ведь плоская структура. Для хэш-функции числа обычно замешиваются с большими простыми множителями. Типа Hash = A*X + B*Y + C*Z. Где-то здесь на форуме я приводила вариант для 2 членов.
Хэш-map теоретически быстрее (при больших числах).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)