我理解谓词从迭代器的输入范围中获取参数并按预期进行操作,但是当我们提供二元谓词和一对迭代器时,它是如何工作的?如何将容器的元素传递给谓词?
E.g。 std::sort
默认按字母顺序对字符串向量进行排序,但要根据大小对它们进行排序,我们可以传递谓词,如:
sort(vec.begin(), vec.end(), [](const string &a, const string &b) {
return a.size() < b.size();
});
所以,这应该按字母大小排序字符串vec
的向量,而不是按字母顺序排序,但是我不能理解这是如何发生的,即谓词如何将向量的元素作为参数它是如何排序的?
答案 0 :(得分:2)
当调用std sort时,&#34; normal&#34;此函数的版本将使用operator<
执行一些比较。就像你理解的那样,两个字符串之间的比较是词典(如字典)。
但是,开发std::sort
函数的人会考虑以下情况:
operator<
这是谓词有用的地方。谓词(如Igor Tandetnik所说)在std::sort
函数内部调用。
因此,对于普通版本,std::sort
将执行类似的操作:
if(*a < *b) {
...
}
在谓词版本中,它几乎会做同样的事情:
if(predicate(*a, *b)) {
...
}
这样,您的谓词会替换operator<
函数。