如何实现枚举类对象的2D向量?

时间:2013-11-14 12:46:56

标签: c++ c++11 vector stl

这是我使用的枚举类。

enum class PlayerColor {BLACK, BLUE, RED};

这就是我想要创建一个向量的方法。基本上,存储顶点名称及其颜色。 我收到了很多错误。

typedef pair<int, PlayerColor> ip;

vector< vector< ip > > vertices;

这就是我想要初始化2D向量(在构造函数内)

的方法
for(auto i=vertices.begin()+1;i<vertices.end();++i)
    for(auto j=i->begin()+1;j<i->end();++j)
    {
        *(j.first)=c++;   //error
        *(j.second)=PlayerColor::BLACK;  //error
    }

此函数采用两个顶点的名称并在它们之间添加边。 (常规工作正常)

addEdge(vertices[i][j+1].first,vertices[i][j].first); //error

编辑: addEdge函数定义为:

void HexBoard::addEdge(int u, int v)
{
    edge[u].push_back(v);
    edge[v].push_back(u);
}

edge是:

vector< vector<int> > edge;

它以C ++ 11样式初始化为:

edge(vector< vector<int> > (size*size + 1 + 4)),EAST(size*size+1),WEST(size*size+2)

size是一个整数。

1 个答案:

答案 0 :(得分:2)

我看到的唯一错误是表达式*(j.first)=c++;*(j.second)=PlayerColor::BLACK; 你需要取消引用迭代器j,如:

    (*j).first=c++;   //no error
    (*j).second = PlayerColor::BLACK;  //no error

编辑:

其他错误可能是因为你的代码没有像行中那样正确地声明:

addEdge(vertices[i][j+1].first,vertices[i][j].first);

如果ij是整数类型,则此处没有错误。如果ij是迭代器,那么您将收到错误。