这是一个例子:
std::set<std::string, SpecialCompareLess> setSpecial;
我记得当我们定义一个自定义比较类型的关联容器时,我们需要注意一些潜在的问题。但是我忘记了问题是什么。
比如:如果你在关联容器上使用 STL 算法,你必须提供这样一个专门的比较器,而不是让算法选择默认的比较器。否则,您将无法获得正确的结果。
如果有人知道我在说什么,你能提醒我关注的是什么吗?
谢谢
这样的问题很多,很多都很难概括,所以没有一个共同的参考。但根据我自己的经验,我可以告诉你几个最常见和最有用的: 1. 如你所知,比较函数可以是任何可调用类型(函子、lambda、函数引用等)。但始终使用仿函数或 lambda,因为编译器总是内联它们,因此您可以获得更好的性能。2. 不要忘记将比较器的参数声明为 const 引用。3. 如果您总是可以编写 apaptors 来封装您的 comaprator 大代码 4. 尝试将您的比较器编写为 FP 中的纯函数。5. 如果您的容器由指针组成,您必须编写自己的比较器,因为默认比较器将对指针值进行排序,而不是取消引用它们。6. 记住相等和等价之间的数学差异,以便编写正确的比较器返回类型(例如 false 表示相等)。您还可以在 Musser、Meyers 和 Herb Sutter 的书中找到一些这样的建议。