0

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;
    }
}

エラーの正確な原因は何ですか?どうすれば修正できますか?

4

1 に答える 1

2

std::lessはファンクターであり、そのコンストラクターは引数を取りません。つまり、次のようにオブジェクトを作成します。

std::less<Key> a;

次に、次のように使用します。

if(a(x,y)) ...

あるいは

if(std::less<Key>()(x,y)) ...

のように、コンストラクターが 0 個以上の引数を取るファンクターがありますstd::bind1st。ルールは、ファンクタがバイナリの場合、operator()2 つの引数を取るというものです。

于 2012-04-21T15:42:47.517 に答える