重载"<"要存储的<map>类的运算符

Overloading "<" operator for a class that I want to store in <map>

本文关键字:lt 运算符 gt 重载 存储 map      更新时间:2023-10-16

我所知,map将数据保持在内部排序,并为此目的使用"<"运算符。如果我不重载该类的"<"运算符,会发生什么情况?

还有一个问题。我应该在类内部还是在类外编写重载函数?

提前谢谢。

据我所知,map 将数据保持在内部排序,并为此目的使用"<"运算符。

有点,但不是直接的。 std::map<Key, T, Compare, Allocator>为此目的使用CompareCompare默认为 std::less<Key> ,而 通常默认使用 < 运算符。但是,即使在标准库实现中,也存在std::less<Key>行为与<不同的情况。

如果我不重载该类的"<"运算符,会发生什么情况?

这要看情况。您可以指定不同的类作为Compare模板参数,以避免使用 std::less 。您可以添加std::less的专业化,以避免使用 < 。但是,如果不这样做,通常会收到有关未定义<的错误消息。