2

make_heap()ベクター内のペアで行うことは可能ですか?

私は使用しています:

 std::vector< std::pair < int , tablero& > > lista_abierta_;

オブジェクト関数を使用してペアを最初のメンバーで並べ替えますが、クラッシュします。

コードは次のとおりです。

#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
#include <functional>
#include "8_puzzle.h"
#include "tablero.h"

using namespace std;

class comp {
public:
    bool operator()(pair < int, tablero&> a, pair < int, tablero&> b) const {
        return a.first > b.first;
    }
};

pair < int, tablero& > puzzle::A_estrella::tope()
{
    pair < int, tablero& > l=lista_abierta_.front();

    pop_heap(lista_abierta_.begin(),lista_abierta_.end());
    lista_abierta_.pop_back();

    return l;
}

【ここから撮影】

4

3 に答える 3

1

std::pair<T, U>提供する限り(:と提供operator<を意味します)、make_heap を使用しても問題はありません。TUoperator<

于 2010-11-09T16:16:02.660 に答える
0

提供しstd::make_heap<T>ている限り呼び出すか、比較演算子を明示的に渡すことができます。Tbool operator<(const T &, const T &)

23行目を変更する必要があります

pop_heap(lista_abierta_.begin(),lista_abierta_.end());

pop_heap(lista_abierta_.begin(),lista_abierta_.end(), comp());
于 2010-11-09T17:43:04.923 に答える