调试映射插入
Debugging map insertion?
在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
。但是你通过了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
}
};
问题是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;
}
};
如前所述,'new'返回指向该对象的指针。为了获得对象本身,需要使用"*"操作符对其解引用。这就是地图不起作用的原因。
另外,如果你想在地图中插入值,我个人认为这样看起来更清晰,可以使用
typedef map<int, Nodo> MyMap;
MyMap myawesomemap;
int V = 5;
Nodo* Raiz = new Raiz(5);
myawesomemap.insert(MyMap::value_type(V, (*Raiz)));
相关文章:
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如果我将嵌套映射作为多重映射的值,如何将值插入内部映射?
- 将包含不可复制对象的对插入到映射中
- 在映射中插入一对时,C++是否需要额外的代码
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 在 c++ 中使用带有映射的插入效率
- 如何编写用于多映射插入和擦除功能的 API?
- 如何将元素插入和迭代到这种映射.C++
- 将数组的元素插入映射的时间复杂度是多少?
- 在映射中插入配对键
- 如何将整数向量插入到键中,标准::映射的值
- 将唯一指针插入std::映射
- 如何将带指针的结构插入到映射中
- std::映射导致插入时出现C2664错误
- 在共享内存中插入映射映射时出现编译器错误
- 将元素插入 c++ 映射 - 插入方法的差异
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 插入映射<字符串,结构>错误
- 在公共方法中插入映射(私有属性)后出现分割故障
- 通过移动mapped_type的 r 值插入映射条目