这是我使用的枚举类。
enum class PlayerColor {BLACK, BLUE, RED};
这就是我想要创建 vector 的方式。基本上,存储顶点名称及其颜色。 我遇到了很多错误。
typedef pair<int, PlayerColor> ip;
vector< vector< ip > > vertices;
这就是我想要初始化 2D vector 的方式(在构造函数内)
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
是一个整数。
最佳答案
我看到的唯一错误是表达式 *(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);
如果i
和j
是整数类型,这里不会报错。如果 i
和 j
是迭代器,那么你会得到一个错误。
关于c++ - 如何实现枚举类对象的二维 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978035/