带有自定义类的无序映射
Unordered Map with a custom class
我是新来的,这是我的第一个问题。(我在这个网站上找到了一些问题的答案,但我不明白他们的意思,因为我的答案有点不同。)让我先给你看一些代码:这是我的类:
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 studio11.0vcincludeunordered_map(239):错误C2228: left of '。首先必须有class/struct/union
所以我读我必须让我自己的EqualOperator或类似的东西,但我似乎无法从它得到一个逻辑。
对于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()
插入检查该元素是否存在于映射上。
相关文章:
- 递归无序映射
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 打印无序映射的第二个元素,即集合
- 由并发无序映射查找线程调用的函数是否安全?
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 使用无序映射在STL中存储键值对
- 为C++中的无序映射获取给定输入键的错误值
- 将大型对象存储在无序映射中是否效率低下
- 在无序映射的结构化绑定中推导类型
- 使用无序映射进行错误索引
- 将一个向量对放在一个无序映射与一个映射中
- 如何在c++中修改无序映射中的每个值
- C++:使用一对(cpp_int,int)整数作为无序映射中的键(其中cpp_int是boost多精度整数)
- 将 [] 索引到无序映射时出现段错误
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 无序映射存储桶的节点大小
- 在无序映射<字符串上使用 find(),向量<string>>与 C++ 中的有序映射花费相同的时间
- 以三个无符号字符为关键字的无序映射
- 无序映射比c++中的映射慢吗