C++ 如何在std::list中插入新结构?

C++ 如何在std::list中插入新结构?,c++,c++11,C++,C++11,好的,我有一个std::结构列表,叫做DigraphEdge 以下是3个关键代码段: //DigraphVertex Struct template <typename VertexInfo, typename EdgeInfo> struct DigraphVertex { VertexInfo vinfo; std::list<DigraphEdge<EdgeInfo>> edges; DigraphVertex(Verte

好的,我有一个std::结构列表,叫做DigraphEdge

以下是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;
//有向图顶点结构
样板
结构有向图顶点
{
维特克斯福;
列边;
有向图顶点(VertexInfo v,std::list l):vinfo(v),边(l){}
}
//有向边结构
样板
结构有向图边
{
从顶点到顶点的整数;
EdgeInfo-einfo;
有向边(int-from,int-to,EdgeInfo e):从顶点(from),到顶点(to),einfo(e){
}
//包含顶点和有关顶点的信息的贴图
地图有向图;
基本上,贴图包含一个键(int)和一个顶点(DigraphVertex)。每个顶点都包含有关该顶点(vinfo)的信息及其类型为DigraphEdge的传出边列表。每个边都包含有关边开始(从顶点)和结束(到顶点)的顶点的信息,以及有关该边的信息(einfo)

关键点是自定义的,并且始终与fromVertex相同。例如,如果我有一条从0到9、从0到3的边——这两条边都将存储在键0的边列表中

有一个叫做addEdge的函数,我遇到了一些问题。addEdge包含3个方面;int-fromVertex、int-to-Vertex和EdgeInfo-einfo。基本上,我需要做的是将一条新边添加到位于关键点/fromVertex的边列表中

我一直在这样做,但是编译器没有识别std::list中存在的insert函数。老实说,我不知道如何才能把它加入到这个名单中去。我觉得这是一种迂回的方法,在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));
}
模板
void-Digraph::addEdge(int-from-vertex,int-to-vertex,const-EdgeInfo&einfo)
{
//检查边缘是否已存在//
digraphMap.find(fromVertex)->second.edges.insert(新的DigraphEdge(fromVertex,toVertex,einfo));
}
编辑: 啊,是的,DigraphEdge只接受一个模板。但是nvm,我知道了。我必须显式地创建一个DigraphEdge对象,然后在该对象上调用push_,而不是执行新的DigraphEdge

对于任何对解决方案感兴趣的人

DigraphEdge<EdgeInfo> newEdge(fromVertex, toVertex, einfo);
digraphMap.find(fromVertex)->second.edges.push_back(newEdge);
DigraphEdge newEdge(fromVertex,toVertex,einfo);
有向图.find(fromVertex)->second.edges.push_back(newEdge);

可能有打字错误

template <typname VertexInfo, typename EdgeInfo>
struct DigraphEdge
模板
结构有向图边
DigraphEdge(更不用说类型名)应该有两个参数,VertexInfo和EdgeInfo。你还是用一个打电话。 新的有向图边(fromVertex、toVertex、einfo)


对于您的主要问题,您正在为插入创建一个指向DigraphEdge的指针,其中您的列表包含DigraphEdge,而不是指向的指针。

哦,哇,您说得对。DigraphEdge只接受1个模板参数。我实际上是想取消对指针的引用,但没有用。不过,我找到了一个解决方案,并对我的问题进行了编辑。