带有自定义类的Unordered_map

时间:2014-05-06 19:00:21

标签: c++ unordered-map

我是新来的,这是我的第一个问题.. (我在查看这个网站的时候找到了一些问题的答案,但是我不明白他们的意思,因为我的意思有点不同。) 我先向您展示一些代码: 所以这是我的班级:

class citems{
public:
    char* name;
    int colorR;
    int colorG;
    int colorB;
    int type;

citems(char* name, int colorR, int colorG, int colorB, int type)
{
    this->name = name;
    this->colorR = colorR;
    this->colorG = colorG;
    this->colorB = colorB;
    this->type = type;
}
};

然后我会做一个像这样做的功能,但有一个很长的列表:

citems getObjectFromId(int ID)
{
static unordered_map <int, citems> item;
static bool init = false;
if (!init)
{
item[123546]= citems("Name", 181,179, 0, 9);
init = true;
}
return item[ID];
}

所以我可以调用项目ID,然后随时获取单独的颜色,类型和名称。 到目前为止一切都还可以,但是当我编译时我得到了这个错误:

  

c:\ program files(x86)\ microsoft visual studio   11.0 \ vc \ include \ unordered_map(239):错误C2228:左边的&#39; .first&#39;必须有class / struct / union

所以我读到我必须制作自己的EqualOperator或类似的东西,但我似乎无法从中获得逻辑。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

对于T& operator[]( const Key& key ),映射类型必须满足DefaultConstructible要求。这意味着您的类citems需要一个默认构造函数:

class citems{
public:
    //...

    /* possible form 1 */
    citems() {
    }

    /* possible form 2 ( default parameter values)*/
    citems( char* name = 0, int colorR = -1, int colorG = -1,
                              int colorB = -1, int type = -1) {
    }
};

另请注意,T& operator[]( const Key& key )返回对映射到等效于key的键的值的引用,如果此类键尚不存在则执行插入。如果您不希望在地图中没有给定键但是要更改现有键时插入新元素 - 您首先要使用find()或插入来检查地图上是否存在此元素与insert()