我对std :: less有一个奇怪的问题。
indexedpriorityq.hpp(21): error C2661: 'std::less<_Ty>::less' : no overloaded function takes 2 arguments
1> with
1> [
1> _Ty=float
1> ]
但是它不应该做什么?
这是我的一些代码:
template<class KeyType, class binary_predicate = std::less<KeyType> >
class IndexedPriorityQ
{
private:
typedef typename std::vector<KeyType> KEYLIST;
KEYLIST& m_Keys_V;
[...]
};
template<class KeyType, class binary_predicate>
void IndexedPriorityQ<KeyType, binary_predicate>::
ReorderUpwards(int size)
{
while( (size>1) &&
(binary_predicate(m_Keys_V[m_Heap_V[size]], m_Keys_V[m_Heap_V[size/2]])) //breaks here
)
{
Swap(size/2, size);
size /= 2;
}
}
究竟是什么导致错误,我该如何解决?
答案 0 :(得分:2)
std::less
是一个仿函数,其构造函数接受0个参数。也就是说,你创建这样的objcet:
std::less<Key> a;
然后,你就这样使用它:
if(a(x,y)) ...
甚至
if(std::less<Key>()(x,y)) ...
有些仿函数的构造函数需要多于0个参数,比如std::bind1st
。规则是如果函子是二进制的,那么它的operator()
需要2个参数。