我在向地图中插入条目时遇到了问题。
#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));
}
};
答案 0 :(得分:5)
您的类型不匹配。您正在将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 :(得分:1)
问题在于Rais
是指向Nodo
的指针,但您尝试将其插入从int
到Nodo
的地图中(而不是来自int
的地图{1}}到Nodo*
)。
尝试:
class Grafo
{
public:
Nodo *Raiz;
map<int, Nodo> Nodos;
Grafo(int V)
{
Raiz = &*Nodos.insert(pair<int, Nodo>(V, Nodo(V))).first;
}
};
答案 2 :(得分:1)
如前所述,'new'返回指向对象的指针。为了获得对象本身,您需要使用'*'运算符取消引用它。这就是地图无法工作的原因。
此外,如果您想将值插入到地图中,我个人认为这样做更清楚
typedef map<int, Nodo> MyMap;
MyMap myawesomemap;
int V = 5;
Nodo* Raiz = new Raiz(5);
myawesomemap.insert(MyMap::value_type(V, (*Raiz)));