如何在std::list中插入一个新结构
How to insert a new struct into std::list?
好的,所以我有一个名为DigraphEdge的结构的std::列表。
以下是3个关键代码段:
//DigraphVertex Struct
template <typename VertexInfo, typename EdgeInfo>
struct DigraphVertex
{
VertexInfo vinfo;
std::list<DigraphEdge<EdgeInfo>> edges;
DigraphVertex(VertexInfo v, std::list<DigraphEdge<EdgeInfo>> l) : vinfo(v), edges(l) {}
}
//DigraphEdge struct
template <typename EdgeInfo>
struct DigraphEdge
{
int fromVertex, toVertex;
EdgeInfo einfo;
DigraphEdge(int from, int to, EdgeInfo e) : fromVertex(from), toVertex(to), einfo(e) {}
}
//map that contains vertices and information about the vertices
std::map<int, DigraphVertex<VertexInfo,EdgeInfo>> digraphMap;
基本上,贴图包含一个关键点(int)和一个顶点(DigraphVertex)。每个顶点都包含有关该顶点(vinfo)的信息以及DigraphEdge类型的传出边的列表。每条边都包含关于边开始(从顶点)和结束(到顶点)的顶点的信息,以及关于该边的信息(einfo)。
关键点是自定义的,并且始终与fromVertex相同。例如,如果我有一条从0到9、从0到3的边,这两条边都将存储在键0的边列表中。
有一个名为addEdge的函数,我遇到了问题。addEdge包含3个方面;int from Vertex、int to Vertex和EdgeInfo einfo。基本上,我需要做的是将一条新边添加到位于键/fromVertex的边列表中。
我一直在这样做,但编译器没有识别std::list中存在的插入函数。老实说,我不知道该如何添加到该列表中。我觉得这是一种迂回的方法,可以在addEdge中创建一个新列表,将所有现有边复制到该列表中,添加新边,然后将新边集设置为与旧列表相等。
template <typename VertexInfo, typename EdgeInfo>
void Digraph<VertexInfo, EdgeInfo>::addEdge(int fromVertex, int toVertex, const EdgeInfo& einfo)
{
//check if the edge already exists//
digraphMap.find(fromVertex)->second.edges.insert(new DigraphEdge<EdgeInfo>(fromVertex,toVertex,einfo));
}
编辑:啊,是的,DigraphEdge只接受一个模板。但是nvm,我想明白了。我必须显式地创建一个DigraphEdge对象,然后对该对象调用push_back,而不是执行新的DigraphEdge。
对于任何对解决方案感兴趣的人。。。
DigraphEdge<EdgeInfo> newEdge(fromVertex, toVertex, einfo);
digraphMap.find(fromVertex)->second.edges.push_back(newEdge);
可能有打字错误??
template <typname VertexInfo, typename EdgeInfo>
struct DigraphEdge
DigraphEdge(更不用说typname)应该接受两个参数,VertexInfo和EdgeInfo。你仍然用一个打电话。新DigraphEdge(从顶点到顶点,einfo)
对于您的主要问题,您正在为插入创建一个指向DigraphEdge的指针,其中您的列表包含Digraph边缘,而不是指向的指针。
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 静态结构和一个定义规则
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 在学习数据结构之前对STL有一个了解是好的吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- std::transform 将一个结构数组复制到另一个结构数组
- C++:如何做一个链表,结构作为参数传递?
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 两个附带的类层次结构-一个好的设计模式