在stl容器中使用比较函数

时间:2010-12-15 13:30:46

标签: c++ stl comparator predicates

为什么我可以这样做:

stable_sort(it1, it2, binary_function);

但不是这样:

priority_queue<type, vector<type>, binary_function> pq;

为什么我可以在第一种情况下使用函数,但在第二种情况下需要一个对象?

2 个答案:

答案 0 :(得分:3)

priority_queue是一个模板,它需要一个类型作为参数,其中binary_function是一个函数对象。

答案 1 :(得分:1)

如果您查看std::stable_sort上的引用,您会看到您提供的binary_function也应该是一个功能对象......这两者之间没有区别,但可能在第二种情况下,没有适当的“强制转换”或从函数转换为适当的函数对象。

我相信这可能是因为*sort函数直接使用函子,并且立即使用,因此如果在调用*sort函数时函数地址有效,它将对函数调用的持续时间。创建使用此作为数据成员的容器(实质上)时,您无法确定在容器对象的生命周期内函数引用是否会失效。我知道这是一个松散的手工解释,但它是我能想到的最好的。也许在C ++中,对二进制函数的引用将被隐含地转换为std::function的构造,以便该函数被“复制”并且没有有效性问题。

我希望我现在没有失去你...