在STL容器中使用比较功能
-
10-10-2019 - |
题
我为什么要这样做:
stable_sort(it1, it2, binary_function);
但不是这个:
priority_queue<type, vector<type>, binary_function> pq;
为什么我可以在第一种情况下使用函数,但是在第二个情况下需要一个对象?
解决方案
如果您查看参考 std::stable_sort
, ,您会看到 binary_function
您提供的,也应该是一个函数对象...两者之间没有区别,除了在第二种情况下可能没有正确的“ cast”或从函数到适当函数对象的转换。
我相信这可能是由于以下事实 *sort
函数直接使用函子,因此,如果函数地址有效,则 *sort
调用功能,它将在函数调用的持续时间内有效。当创建将其用作数据成员的容器(本质上)时,您无法确定该功能参考在容器对象的生命周期内会无效。我知道这是一个松散的手动阐释,但这是我能想到的最好的。也许在C ++中,对二进制函数的引用将被隐含地转换为构造 std::function
因此,该函数被“复制”,并且没有有效性问题。
我希望我现在还没有失去你...
其他提示
priority_queue
是一个模板,它期望一种类型作为参数,在哪里 binary_function
是功能对象。
不隶属于 StackOverflow