c++ - 如何实现枚举类对象的二维 vector ?

标签 c++ c++11 vector stl

这是我使用的枚举类。

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);

如果ij是整数类型,这里不会报错。如果 ij 是迭代器,那么你会得到一个错误。

关于c++ - 如何实现枚举类对象的二维 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978035/

相关文章:

c++ - 在 C++ 中使用 vector 给了我一个我无法理解的错误

c++ - 为什么 gets 不将值存储在变量中?

c++ - 尝试使用OpenSSL EVP AES 256 C++时出现LINK错误

xcode - 在 Visual Studio 2013 上使用 std::function<void>

BST 中的 C++11 神奇删除构造函数

c++ - 模板化线性代数 vector 类中出现奇怪的 "Member function not viable"错误

c++ - QML 访问不可调用函数

c++ - 使用c++查找窗口并修改控件

c++ - 通用 lambda 与标准模板函数(使用什么以及何时使用)

android - 在 Lollipop 崩溃前使用 android vector Drawables