как инициализировать эту шаблонную пару в C ++? - PullRequest
0 голосов
/ 08 февраля 2012
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: ошибка:« G :: ePair »не является шаблоном« Я являюсьне знаете точно, почему появляется эта ошибка компиляции?я что-то здесь упускаю?

1 Ответ

0 голосов
/ 08 февраля 2012

Я использовал 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;
}
...