3

マップへのエントリの挿入に問題があります。

#include <stdio.h>
#include <vector>
#include <stack>
#include <map>

using namespace std;

class Nodo
{
public:
    vector<Nodo> Relaciones;
    int Valor;
    bool Visitado;

    Nodo(int V)
    {
        Valor = V;
        Visitado = false;
    }
};

class Grafo
{
public:
    Nodo *Raiz;
    map<int, Nodo> Nodos;

    Grafo(int V)
    {
        Raiz = new Nodo(V);
        //Getting http://msdn.microsoft.com/en-us/library/s5b150wd(v=VS.100).aspx here
        Nodos.insert(pair<int, Nodo>(V, Raiz));
    }
};
4

3 に答える 3

5

タイプの不一致があります。Nodo*オブジェクトが必要なときに、pairコンストラクターにa を渡していNodoます。

あなたは宣言します:

Nodo *Raiz;

そして、あなたは電話しようとします:

pair<int, Nodo>(V, Raiz)

intanと aを期待しNodoます。しかし、あなたはそれを通過しましintNodo*

おそらくあなたが望むのはこれです:

class Grafo
{
    public:
        Nodo *Raiz;
        map<int, Nodo*> Nodos;    //  change to pointer

        Grafo(int V)
        {
            Raiz = new Nodo(V);
            //Getting http://msdn.microsoft.com/en-us/library/s5b150wd(v=VS.100).aspx here
            Nodos.insert(pair<int, Nodo*>(V, Raiz));   // change to pointer
        }
};
于 2011-10-15T04:49:05.117 に答える
1

問題はRais、 へのポインターですが、それを から へのマップ(からへのマップではなく)Nodoに挿入しようとしていることです。intNodointNodo*

試す:

class Grafo
{
    public:
        Nodo *Raiz;
        map<int, Nodo> Nodos;

        Grafo(int V)
        {
            Raiz = &*Nodos.insert(pair<int, Nodo>(V, Nodo(V))).first;
        }
};
于 2011-10-15T04:50:43.997 に答える
1

前述のように、'new' はオブジェクトへのポインターを返します。オブジェクト自体を取得するには、'*' 演算子を使用して逆参照する必要があります。そのため、マップが機能しません。

さらに、マップに値を挿入したい場合は、個人的にはより明確に見えると信じています。

typedef map<int, Nodo> MyMap;
MyMap myawesomemap;
int V = 5;
Nodo* Raiz = new Raiz(5);
myawesomemap.insert(MyMap::value_type(V, (*Raiz)));
于 2011-10-15T07:21:03.517 に答える