Отладка вставки карты? - PullRequest
       18

Отладка вставки карты?

3 голосов
/ 15 октября 2011

У меня проблема с вставкой записи на карту.

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

Ответы [ 3 ]

5 голосов
/ 15 октября 2011

У вас несоответствие типов.Вы передаете Nodo* в конструктор pair, в то время как он ожидает объект Nodo.

Вы объявляете:

Nodo *Raiz;

и затем пытаетесь вызвать:

pair<int, Nodo>(V, Raiz)

, который ожидает int и Nodo.Но вы прошли его int и Nodo*.

Что вы, вероятно, хотите, это:

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
        }
};
1 голос
/ 15 октября 2011

Как уже упоминалось, «новый» возвращает указатель на объект. Чтобы получить сам объект, вам нужно разыменовать его с помощью оператора '*'. Вот почему карта не работает.

Кроме того, если вы хотите вставить значения в карту, что, на мой взгляд, выглядит более понятным, сделав

typedef map<int, Nodo> MyMap;
MyMap myawesomemap;
int V = 5;
Nodo* Raiz = new Raiz(5);
myawesomemap.insert(MyMap::value_type(V, (*Raiz)));
1 голос
/ 15 октября 2011

Проблема в том, что Rais - это указатель на Nodo, но вы пытаетесь вставить его в карту от int до Nodo (а не карту от int до Nodo*).

Попробуйте:

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

        Grafo(int V)
        {
            Raiz = &*Nodos.insert(pair<int, Nodo>(V, Nodo(V))).first;
        }
};
...