0

私は 6 次のケビン ベーコン問題を実装し、アクター ノードのクラスを作成しています。ユーザー定義のクラスを保持するために set を使用できますが、hash_set コンテナーは使用できません。なぜ?エラー メッセージは次のように表示されます: エラー C2440: '型キャスト' : 'const ActorGraphNode' から 'size_t' に変換できません 1> この変換を実行できるユーザー定義変換演算子がないか、演算子を呼び出せません....

#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;}
};
4

2 に答える 2

1

当然のことながら、hash_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;}
    bool operator ==( const ActorGraphNode& a ) const
    { return ActorName == a.ActorName;}
    operator size_t() const
    {
      return hash<string>()(ActorName);
    }
};
于 2013-05-29T21:26:55.620 に答える
0

あなたの答えとコメントをありがとう。これが私の更新されたコードです。関数 linkCostar() に加えて、現在は参照渡しを使用しています。

class ActorGraphNode{
public: 
    string ActorName;
    hash_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 size_t() const
    {
        const int HASHSIZE = 501;
        int seed = 131;
        size_t sum = 0;
        for(size_t i = 0; i < ActorName.length(); ++i) 
            sum = (sum * seed) + ActorName[i];      
        return sum % HASHSIZE;
    }
};
于 2013-05-29T21:58:51.733 に答える