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