Простая реализация hashmap в C ++

Как сказал Майкл, установите флажок «Требуется полный экран» в разделе «Общие»> «Цели

), а также удалите« CFBundleIcons-ipad »из info.plst

. Это сработало для меня

30
задан Will 20 August 2013 в 12:43
поделиться

4 ответа

Большинство компиляторов должно определить std::hash_map для Вас; в прибытии C++0x стандарт, это будет часть стандартной библиотеки как [1 114] std::unordered_map . Страница STL на нем является довольно стандартной. При использовании Visual Studio , Microsoft имеет страницу на ней.

, Если Вы хотите использовать свой класс в качестве значения, не в качестве ключа, тогда Вы не должны делать ничего специального. Все типы примитивов (вещи как int, char, bool и даже char *) должны "просто работать" ключами hash_map. Однако для чего-либо еще необходимо будет определить собственное хеширование и функции равенства и затем записать "функторы", которые обертывают их в класс.

Принятие Вашего класса называют MyClass, и Вы уже определили:

size_t MyClass::HashValue() const { /* something */ }
bool MyClass::Equals(const MyClass& other) const { /* something */ }

необходимо будет определить два функтора для обертывания тех методов в объекты.

struct MyClassHash {
  size_t operator()(const MyClass& p) const {
    return p.HashValue();
  }
};

struct MyClassEqual {
  bool operator()(const MyClass& c1, const MyClass& c2) const {
    return c1.Equals(c2);
  }
};

И инстанцируют Вашего hash_map / hash_set как:

hash_map<MyClass, DataType, MyClassHash, MyClassEqual> my_hash_map;
hash_set<MyClass, MyClassHash, MyClassEqual> my_hash_set;

Все должно работать как ожидалось после этого.

26
ответ дан hazzen 20 August 2013 в 12:43
поделиться
  • 1
    Обойти Chris L' s точка, можно сделать (нечто - панель) + (панель - нечто). Получить все различия между массивами (или строки, если Вы используете .to_a), – diedthreetimes 21 July 2011 в 00:05

Попробуйте повышение незаказанный классы.

3
ответ дан Mark Ransom 20 August 2013 в 12:43
поделиться
7
ответ дан dalle 20 August 2013 в 12:43
поделиться

Используя hashmaps в C++ легко! Это похоже на использующую стандартную карту C++. Можно использовать Ваш, реализация компилятора/библиотеки unordered_map, или используйте тот, обеспеченный повышение , или некоторый другой поставщик. Вот быстрый образец. Вы найдете больше, если Вы перейдете по ссылкам, Вам дали.

#include <unordered_map>
#include <string>
#include <iostream>

int main()
{
    typedef std::tr1::unordered_map< std::string, int > hashmap;
    hashmap numbers;

    numbers["one"] = 1;
    numbers["two"] = 2;
    numbers["three"] = 3;

    std::tr1::hash< std::string > hashfunc = numbers.hash_function();
    for( hashmap::const_iterator i = numbers.begin(), e = numbers.end() ; i != e ; ++i ) {
        std::cout << i->first << " -> " << i->second << " (hash = " << hashfunc( i->first ) << ")" << std::endl;
    }
    return 0;
}
16
ответ дан E-rich 20 August 2013 в 12:43
поделиться
  • 1
    Я использую diffy для одного из моих проектов. Просто работы. Спасибо. – ardsrk 29 February 2012 в 07:13
Другие вопросы по тегам:

Похожие вопросы: