我正在實施六度Kevin Bacon問題併爲actor節點寫入一個類。 我可以使用set而不是hash_set容器來容納用戶定義的類。爲什麼?錯誤消息顯示:錯誤C2440:'type 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 <'是不必要的。 –
Equality可以是編譯器生成的,但是可以肯定的是,如果你不想比較整個linkedActors集的開銷,你可以編寫自己的。 – riv
我認爲它更好地使你自己的std :: hash專業化,而不是使運算符size_t –