0
template<class V, class E>
class G
{
    public:
            G();
            void InsertVertex(const V&);
            void InsertEdge(const V&, const V&, const E& );
    private:
            typedef set<V,less<V> > vSet;
            typedef pair<const V,V> ePair;
            typedef multimap<V,V,less<V> > eSet;
            typedef map<ePair,E, less<ePair> > edgeValueMap;
            vSet vertices;
            eSet edges;
            edgeValueMap edgeVals;

};

template<class V,class E>
G<V,E>::G(){}

template<class V,class E>
void G<V,E>::InsertVertex(const V& a)
{
    vertices.insert(a);
}

template<class V,class E>
void G<V,E>::InsertEdge(const V& a,const V& b, const E& val)
{
    //create a pair
    ePair<const V,v> e(a,b);
    edges.insert(e);
    edgeVals.insert(e,val);

}


int main()
{
    G<char,int> g;
    g.InsertVertex('a');
    g.InsertVertex('b');
    g.InsertVertex('c');
    g.InsertEdge('a','b',1);
    return 0;

}

当我使用“ePair e(a,b)”创建一对时出现错误:“template2.cpp:39:2: error: 'G::ePair' is not a template” 我不确定为什么要编译错误来了?我在这里错过了什么吗?

4

1 回答 1

0

我正在使用 make_pair 来构建实际的地图条目,它在这里工作。但请注意,调用也edgeVals.insert(e,val);给出错误:所以我也修改了:

template<class V,class E>
void G<V,E>::InsertEdge(const V& a,const V& b, const E& val)
{
    //create a pair
    ePair e = make_pair(a,b);
    edges.insert(e);
    edgeVals[e] = val;
}
于 2012-02-08T11:20:56.760 回答