Как я могу найти пересечение двух массивов, используя хэш-функции в C ++? - PullRequest
1 голос
/ 11 марта 2011

Я новичок в хешировании и не знаю, как это сделать в C ++.В Java у нас есть такие функции, как ContainsKey, put, get и т. Д. Для Hash.Есть ли что-нибудь подобное в C ++?Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Вы можете начать с std::set<>, который является сбалансированным двоичным деревом.Самые последние компиляторы также предоставляют unordered_set<>, которая является хеш-таблицей, но не является частью C ++ 03: она будет частью C ++ 0x.У библиотеки повышения также есть реализация хэш-набора.

Для std :: set <> см. http://www.cplusplus.com/reference/stl/set/

например

std::set<int> s;
for (int i = 0; i < first_vector.size(); ++i)
    s.insert(first_vector[i]);
for (int i = 0; i < second_vector.size(); ++i)
    if (s.find(second_vector[i]) != s.end())
        do_something();
1 голос
/ 11 марта 2011

Вы, вероятно, хотите класс unordered_set. Он является частью TR1 и стандартизирован в C ++ 0x, более старые компиляторы могут найти реализацию в библиотеке boost.

0 голосов
/ 11 марта 2011

используйте std::map, вы можете делать такие же вещи, как HashMap в Java

...