мне нужен контейнер, чтобы содержать только уникальные элементы, поэтому у меня есть структура вроде этого:Как чтобы убедиться в отсутствии дубликатов в повышение :: unordered_set пользовательских данных
class OD
{
private:
std::string key;
public:
OD(){}
OD(const WayPoint &origin, const WayPoint &destination):
origin(origin), destination(destination)
{
std::stringstream str("");
str << origin.node_->getID() << "," << destination.node_->getID();
key = str.str();
}
bool operator<(const OD & rhs) const
{
return key < rhs.key;
}
bool operator()(const OD & rhs, const OD & lhs)
{
return rhs < lhs;
}
};
и контейнер:
std::set<OD,OD> t;
Теперь мне нужно сменить мой контейнер на boost::unordered_set
, Мне нужно изменить функтор? Я смущен, потому что знаю, что я не могу разделить реализацию порядка и уникальности, и на этот раз контейнер не упорядочен. Поэтому я боюсь, что перегрузка будет бесполезной.
Компаратор по умолчанию для 'set' (' std :: less ') уже отменил оператор' <'; не нужно создавать пользовательские. Для 'unordered_set' вам нужен хэш и оператор' == '. –
Ответ [здесь] (http://stackoverflow.com/questions/6687162/c-some-questions-on-boostunordered-map-boosthash?rq=1) сообщает, что нужно. –