使用用户定义的键类型了解 STL 映射
在 C 语言中,STL 映射提供了强大的数据结构,用于根据唯一键组织数据。但是,使用具有用户定义类型的映射可能会导致编译错误。
根本原因:缺少比较运算符
错误消息突出显示缺少重载的 less-用户定义类 Class1 的比运算符 (
使用自定义比较器进行解析
要解决此问题,您可以创建一个自定义比较器类来定义 Class1 对象的比较逻辑。例如:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;
这里,Class1Compare 类提供了根据 id 值比较 Class1 对象的实现。
替代方案:专门化 std::less
或者,您可以将 std::less 模板专门用于 Class1对象:
namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
通过专门化 std::less,您可以为 Class1 对象提供特定的比较逻辑,同时最大限度地降低代码复杂性。
以上是如何将用户定义的键类型与 C STL 映射一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!