克服障碍:使用带有用户定义类型的 std::map 作为键
在 C 中映射键值对领域,首选用户定义类型来定义键的情况并不罕见。但是,当尝试将 std::maps 与用户定义的键一起使用时,编译期间可能会出现神秘的错误消息。为了理解这个错误及其重要性,让我们深入研究 std::maps 和用户定义类型的细微差别。
使用 std::maps 时,我们经常依赖原始类型作为键,例如整数或字符串。基元类型具有明确定义的比较运算符(、== 等),有助于在映射内进行高效的键排序。但是,当使用用户定义的类型作为键时,需要注意的是,这些比较运算符的实现对于映射的正确运行至关重要。这就是您遇到的错误消息发挥作用的地方。
问题中提到的错误暗示缺少运算符
用户定义的 Class1 的实现。默认情况下,std::maps 依赖于 less 。比较键的模板。少<>内部调用操作符要解决这个问题,有几种可行的解决方案:struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;
namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }通过采用其中一种方法,您可以克服错误并成功利用 std: :以用户定义类型作为键的映射。选择最符合您的项目要求和设计原则的解决方案非常重要。
以上是如何在 C 中使用用户定义类型作为 std::maps 中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!