Derzeit versuche ich Kombinationen zu erzeugen und ich den folgenden Code verwende:Welche Bibliotheken brauche ich, um std :: Platzhalter zu verwenden?
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
template<class RandIt, class Compare>
bool next_combination(RandIt first, RandIt mid, RandIt last)
{
std::sort(mid, last, std::bind(std::less<int>(), std::placeholders::_2
, std::placeholders::_1));
return std::next_permutation(first, last, std::less<int>());
}
Mit g ++ nicht sagen, es zu kompilieren:
next_combo.cpp: In function ‘bool next_combination(RandIt, RandIt, RandIt)’:
next_combo.cpp:10: error: ‘bind’ is not a member of ‘std’
next_combo.cpp:10: error: ‘std::placeholders’ has not been declared
next_combo.cpp:11: error: ‘std::placeholders’ has not been declared
Ich dachte, dass std :: Platzhalter in funktioneller deklariert wurden Aber jetzt bin ich verwirrt. Sollte ich nur Boost verwenden?
Auch der Rest des Projekts verwendet C++ 0x, gibt es also eine bessere Möglichkeit, dies mit C++ 0x Features zu schreiben?
Jede Hilfe sehr geschätzt :)
müssen Sie C++ 0x Flag mit Ihrem g ++ - Compiler verwenden, um diese zu bekommen. Oder boost :: bind. – Anycorn
@aaa, danke, das sieht aus wie es mein Problem gelöst hat. – shuttle87
Warum verwenden Sie nicht lambdas anstelle der lästigen Bindung? Wenn Sie C++ 0x verwenden, ist es sinnvoll, std :: sort (v.begin(), v.end(), [] (int l, int r) zu schreiben -> bool { zurückgeben l> r; }); intead –