2014-08-28 1 views
0

У меня есть тип Extended_Expression, который я использую в неупорядоченных наборов, и с равенством объявлен как это:указать равенство между элементами для поиска в unordered_set

bool ExtendedExpression::operator == (const ExtendedExpression & exp) const{ ... } 

Но находка оператор unordered_set, кажется, не работает, кажется, что он использует другой вид равенства, например, адрес памяти.

Каков самый простой способ указать оператор равенства, который будет использоваться? Я начинаю на C++ извините, если вопрос очевиден.

+1

Это отлично подходит для оператора равенства. Возможно, вы не внедрили хорошую функцию хэширования. – juanchopanza

+0

есть определенный хэш(), но автоматически ли он используется неупорядоченным множеством? На публике: HashExpr Hash() const {return _hash;} и в protected: HashEpxr _hash; –

ответ

0

Для вашего типа вам нужно будет std::hash для вашего типа, если вы хотите, чтобы unordered_set работал так, как вы ожидали. Для примера см. Ответ здесь https://stackoverflow.com/a/8157967/2558027.

Все новые неупорядоченные контейнеры, такие как unordered_map, основаны на хеш-таблице, а не на красно-черном дереве, как традиционные. Это позволяет очень быстро, постоянно использовать поиск больших наборов данных.

Смежные вопросы