调试映射插入

Debugging map insertion?

本文关键字:插入 映射 调试      更新时间:2023-10-16

在Map中插入条目时遇到问题。

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

类型不匹配。你将一个Nodo*传递给pair构造函数,而它需要一个Nodo对象。

声明:

Nodo *Raiz;

,然后你试着打电话:

pair<int, Nodo>(V, Raiz)

期望一个int和一个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
        }
};

问题是Rais是指向Nodo的指针,但您正试图将其插入从intNodo的映射(而不是从intNodo*的映射)。

试题:

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

如前所述,'new'返回指向该对象的指针。为了获得对象本身,需要使用"*"操作符对其解引用。这就是地图不起作用的原因。

另外,如果你想在地图中插入值,我个人认为这样看起来更清晰,可以使用

typedef map<int, Nodo> MyMap;
MyMap myawesomemap;
int V = 5;
Nodo* Raiz = new Raiz(5);
myawesomemap.insert(MyMap::value_type(V, (*Raiz)));