Я реализую проблему шести Кевина Бэкона и записываю класс для узла актера. Я могу использовать set, но не hash_set для хранения определенного класса. Зачем? ошибка msg показывает: ошибка C2440: «тип cast»: невозможно преобразовать из «const ActorGraphNode» в «size_t» 1> Доступный пользовательский оператор преобразования не может выполнять это преобразование, или оператор не может быть вызван ... .не может содержать определенный пользователем класс в hash_set
#include <hash_set>
#include <set>
class ActorGraphNode{
public:
string ActorName;
//hash_set<ActorGraphNode> linkedActors;
set<ActorGraphNode> linkedActors;
ActorGraphNode(string name):ActorName(name){}
void linkCostar(ActorGraphNode actor){
linkedActors.insert(actor);
actor.linkedActors.insert(*this);
}
bool operator<(const ActorGraphNode& a) const
{ return ActorName < a.ActorName ? true : false;}
};
Вам также нужно равенство, а 'operator <' не требуется для контейнеров с неупорядоченным/хэш-кодом. –
Равенство может быть сгенерировано компилятором, но, конечно, вы можете написать свой собственный, если, скажем, вы не хотите иметь накладные расходы на сравнение всего набора linkedActors. – riv
Я думаю, что лучше сделать свою собственную специализацию для std :: hash вместо того, чтобы делать оператор size_t –