Je suis en train de changer l'ordre par défaut des éléments dans un ensemble d'entiers pour être lexicographique au lieu de numérique, et je ne peux pas obtenir ce qui suit pour compiler avec g ++:En utilisant std personnalisé :: comparateur mis
file.cpp:
bool lex_compare(const int64_t &a, const int64_t &b)
{
stringstream s1,s2;
s1 << a;
s2 << b;
return s1.str() < s2.str();
}
void foo()
{
set<int64_t, lex_compare> s;
s.insert(1);
...
}
Je reçois l'erreur suivante:
error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Compare, class _Alloc> class std::set’
error: expected a type, got ‘lex_compare’
ce que je fais mal?
fait mon problème semblait être une fermeture supplémentaire> dans la déclaration de l'ensemble. Je ferme la question en tant que faux. (en utilisant une fonction droite au lieu d'un foncteur est parfaitement acceptable pour STL) –
le code dans la question est plus simple que ce que vous avez proposé (pour un comparateur de fonction simple) et fonctionne très bien. –
@Omry: Je serais intéressé de savoir quel compilateur vous utilisez: http://codepad.org/IprafuVf –