C++ 如何在C+中创建键和值作为结构的映射+;?
我正在尝试创建一个键和值都是struct(stE和stR)的映射,因此我有如下内容:C++ 如何在C+中创建键和值作为结构的映射+;?,c++,map,struct,C++,Map,Struct,我正在尝试创建一个键和值都是struct(stE和stR)的映射,因此我有如下内容: struct stR{ char* est; char* et; }; struct stE{ int num; char* form; char* et; map<stE,stR> s; }; template<class Key, class T, class Compare = std::less<K
struct stR{
char* est;
char* et;
};
struct stE{
int num;
char* form;
char* et;
map<stE,stR> s;
};
template<class Key, class T, class Compare = std::less<Key>, ... > class map;
这给了我一个错误:
C:\Dev Cpp\include\C++\3.4.2\bits\stl_function.h在成员函数“bool std::less::operator()(const _Tp&,const _Tp&)const[with _Tp=stEstado]”中:
我找不到有什么问题。有人能帮我吗?
提前感谢。使用地图时,您需要提供一个小于运算符或给它一个比较器,因为它会自动对钥匙进行排序
bool stE::operator< (const stE &);
bool-stE::operator<(const-stE&);
使用地图时,您需要提供一个小于运算符或给它一个比较器,因为它会自动排序键
bool stE::operator< (const stE &);
bool-stE::operator<(const-stE&);
你需要提供,你可以通过定义你需要提供的操作符来实现,你可以通过定义操作符来实现和其他的可能重复。和其他的可能重复。你需要,或者,您必须声明一个comparator类,并将其作为定义中的map
的第三个模板参数提供给struct-stE
,或者您必须声明一个comparator类,并将其作为struct-stE
定义中的map
的第三个模板参数。std::map不要求其值类型为默认可构造的(通常)。map代码>成员是一个更大的问题,因为此时stE不完整,这是非法的(尽管并非所有实现都会拒绝它)。@ymett如果为映射中不存在的键调用映射的运算符[],则将默认构造该值。至于不完整的类型,我必须检查标准。GCC似乎毫无怨言地接受了这一点:-),所以如果您想使用运算符[]值,则类型必须是默认可构造的,否则就不能。许多实现实际上会接受不完整的类型,但标准说它是未定义的。std::map不要求其值类型为默认可构造的(通常)。map代码>成员是一个更大的问题,因为此时stE不完整,这是非法的(尽管并非所有实现都会拒绝它)。@ymett如果为映射中不存在的键调用映射的运算符[],则将默认构造该值。至于不完整的类型,我必须检查标准。GCC似乎毫无怨言地接受了这一点:-),所以如果您想使用运算符[]值,则类型必须是默认可构造的,否则就不能。许多实现实际上会接受不完整的类型,但标准说它是未定义的。
struct stE{
int num;
char* form;
char* et;
map<stE,stR> s; // how do we use this in the comparison?
};