C++ 如何在C+中创建键和值作为结构的映射+;?

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(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<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?
};