2016-03-26 7 views
2

ich ein boost::binomial_heap mit einem Komparator erstellen möge, die externen Daten verwendet, so etwas wieKomparator mit Fänger

bool compare(int a1, int a2) 
{ 
    return price[a1] < price[a2]; 
} 

(hier price zum Beispiel ist ein vector von Doppel.)

Wie erklären die Vergleichsfunktion, die price erfasst?

+0

Was genau ist "Preis"? –

+0

Zum Beispiel ein Vektor von Doppeln, der durch int indexiert werden kann und in derselben Klasse definiert ist, in der der Heap verwendet wird. – danatel

Antwort

0

Der folgende C++ 11 Code zeigt, wie dies zu tun:

#include <vector> 
#include <map> 
int main() 
{ 
    std::vector<double> price{0.3, 0.2, 0.1}; 
    auto cmp = [&price](int i, int j){return price[i] < price[j];}; 
    std::map<int, float, decltype(cmp)> m(cmp); 
    m[2] = 'b'; 
    m[1] = 'c'; 
} 

Die Linie

std::vector<double> price{0.3, 0.2, 0.1}; 

price den Vektor definiert.

Die Linie

auto cmp = [&price](int i, int j){return price[i] < price[j];}; 

schafft eine Lambda-Funktion, die durch Bezugnahme price einfängt.

Die Linie

std::map<int, float, decltype(cmp)> m(cmp); 

schafft einen Behälter (in diesem Fall std::map) durch diese Art parametriert und als Komparator ein Objekt nehmen. Die Verwendung mit einem anderen Container wird ähnlich sein.

+0

Danke. Was wäre, wenn ich eine Klasse erstellen möchte, die sowohl die Karte 'm' als auch den Vektor 'Preis' als Mitglieder enthält? Ist es möglich, eine Funktion 'cmp' zu deklarieren, die 'this' erfasst und dann ihren Typ in der Deklaration einer Membervariablen 'm' verwendet? – danatel

+0

@danatel Ja, das ist der richtige Weg. –

Verwandte Themen