基于STL地图类的图类中的模板参数

时间:2013-04-26 19:55:14

标签: c++ templates map vector graph-theory

我正在为使用STL的map类实现的简单图表类编写头文件。但是,我遇到模板参数的问题,它似乎告诉我,我不能声明矢量和地图对象“没有类型”,但我看不出我怎么没有给它所需的类型。此外,向量和映射类包含在指令中。 private:已被评论用于测试。我觉得这是某种语法错误。

Graph.h

#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>

template <typename T>
class Graph
{
public:
    Graph();
    Graph(const Graph<T>& other);
    Graph& operator=(const Graph<T>& other);
    ~Graph();

    vector<T> AdjacentNodes(const T& n);

//private:
    map<T, vector<T>> m;
};

2 个答案:

答案 0 :(得分:1)

要使用地图和矢量类,您需要添加以下头文件

#include <map> 
#include <vector>

并且map和vector也是std命名空间的一部分。因此你需要使用std :: map,std :: vector。

答案 1 :(得分:0)

(从http://www.cplusplus.com/reference/map/map/获取的块,我建议您查看!)

template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           >

首先,确保你输入“using namespace std;”在顶部或前置std项目,例如地图矢量std::

其次,如上面的模板所示,如果typename T不是定义std::less的数据类型,则需要创建自己的比较函数(可以是函数指针或函数对象) )并将其作为第三个模板参数输入。

最后,如果您使用较旧的编译器,请务必将>>放入map<T, vector<T>> m;,您需要在最后两个>之间加一个空格