在 C 中在编程中,将 STL 映射与用户定义的类一起使用常常会遇到神秘的编译器错误。具体来说,错误消息“与‘operator<’不匹配” in '__x < __y'”在尝试使用用户定义类型的键访问元素时很常见。
错误消息表明编译器无法找到运算符 <用于比较用户定义类型的两个实例。这是因为,默认情况下,STL 映射需要比较运算符(运算符<)来对它们的键进行排序。但是,当使用用户定义类型时,此运算符不会自动可用。
而不是定义运算符
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;对于用户定义的类型,可以创建一个比较器函数对象类。此类实现了operator()的专门版本,用于确定用户定义类型的相对顺序。然后可以专门使用此比较器来映射映射:</p> <h3></h3> <p>解决方案 2:专门化 std::less</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }另一种选择是专门为用户定义的 std::less 模板类型。这为 std::less 类中的 operator() 提供了自定义定义:
结论
使用 STL 映射和用户定义类型时,必须提供一种比较键的方法。这可以通过比较器函数对象或专门化 std::less 来实现。通过满足这一要求,开发人员可以有效地利用以用户定义类型作为键的映射。以上是如何使用用户定义类型作为 C std::maps 中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!