2013-04-22 3 views
1

Я реализует boost::bimap и я рассматриваю, используя unordered_multiset_of но unordered_multiset_of нужно передать хэш-функцию и равный оператор к нему. И я не могу понять это правильно.вопросов о unordered_multiset_of в повышающем bimap

class MyClass 
{ 
    std::string s1; 
    std::string s2; 
    bool operator == (MyClass const& myClass) 
    { 
    return (s1 == myClass.s1 && s2 == myClass.s2); 
    } 
}; 

namespace std 
{ 
    template<> 
    struct hash<MyClass> 
    { 
    std::size_t operator()(const MyClass& myClass) const 
    { 
     std::size_t Seed = 0; 
     boost::hash_combine(Seed, myClass.s1); 
     boost::hash_combine(Seed, myClass.s2); 
     return Seed; 
    } 
    } 
} 


int main() 
{ 
    typedef boost::bimaps::bimap<boost::bimaps::unordered_multiset_of<client,std::hash<MyClass>, std::equal_to>, .......................................> MyBiMap; 

    MyBiMap MAP; 
} 

Кажется, что моя хеш-функция и функция equal_to дают ошибку. Как его исправить? Я верю, что std::equal_to() автоматически вызовет мой оператор ==, определенный в MyClass, правильно?

ответ

0

bool operator == (MyClass const& myClass)

Должен быть constbool operator == (MyClass const& myClass)const Othervise std::equal_to не смогут использовать его, так как он принимает константные ссылки

template <class T> struct equal_to : binary_function <T,T,bool> { 
    bool operator() (const T& x, const T& y) const {return x==y;} 
}; 
+0

Спасибо. Это решает проблему. – cynric4sure

+0

Привет, Алексридер, Еще один вопрос. Теперь у меня есть бимап с unordered_multiset с обеих сторон. Я хочу проверить, существует ли связь между двумя объектами. Я могу найти syntex для ключа поиска, но кажется, что функция поиска не существует, правильно? – cynric4sure