繁体   English   中英

在stl容器中使用比较函数

[英]using comparison function in stl container

我为什么这样做:

stable_sort(it1, it2, binary_function);

但不是这个:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM