Wie kann ich die lambda auch für die container-Vergleich-operator ?
Dies ist, wie ich verwenden würde eingebaute Funktion oder die neue Klasse als eine benutzerdefinierte Komparator -
priority_queue< int, vector<int>, greater<int> > third (myints,myints+4);
//using mycomparison:
priority_queue< int, vector<int>, mycomparison > q1;
class mycomparison
{
public:
bool operator() (const int& lhs, const int&rhs) const
{
return (lhs<rhs);
}
};
typedef priority_queue<int,vector<int>,mycomparison> q2;
Aber ich Frage mich, ob ich verwenden kann, lambda-Funktionen gibt es ..
- Lambdas sind funktoren, in der Erwägung, dass die Container müssen einen Funktor geben. Sie könnten in der Lage sein, etwas zu tun mit
decltype
obwohl (aber ich würde nicht erwarten, dass es funktioniert in MSVC2010). - Ja, Sie könnte verwenden Sie einen lambda-Ausdruck, aber die lambda würde müssen so global wie die meisten globalen Deklaration von seiner Verwendung als eine Art, die Niederlagen den Zweck und ist in der Regel messier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren Sie zuerst die lambda:
Dann verwenden decltype:
Nun, wenn Sie verwenden
q2
übergeben Sie in der Funktion:Grundsätzlich priority_queue nimmt der Typ einer Funktion, wie es ist 3. Vorlage-argument, während der Konstruktor nimmt einen Zeiger auf die Funktion selbst.
q2
. Also, wenn Sie brauchenq2
werden in einen header, dann müssen Sie auch diese Globale variable in einem header. Das ist nicht die einfachste Sache der Welt, wenn Sie verwenden möchtenauto
.