Cela dépend de votre définition de « élégante » est, mais oui, cela peut être terminé. En fait, de nombreuses façons différentes.
En standard C++, vous pouvez utiliser un Functor:
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
class Gizmo
{
public:
int n_;
};
class BiggestGizmo : public std::binary_function<bool, Gizmo, Gizmo>
{
public:
bool operator()(const Gizmo& lhs, const Gizmo& rhs) const
{
return lhs.n_ > rhs.n_;
}
};
int main()
{
typedef vector<Gizmo> Gizmos;
Gizmos gizmos;
Gizmos::const_iterator it = max_element(gizmos.begin(), gizmos.end(), BiggestGizmo());
}
En C++ 0X, vous pouvez utiliser un Lambda:
#include <algorithm>
#include <vector>
using namespace std;
class Gizmo
{
public:
int n_;
};
int main()
{
typedef vector<Gizmo> Gizmos;
Gizmos gizmos;
Gizmos::const_iterator it = max_element(gizmos.begin(), gizmos.end(), [](const Gizmo& lhs, const Gizmo& rhs) -> bool
{
return lhs.n_ > rhs.n_;
});
}
Cela dépend de votre définition de "élégant" et si vous avez un support C++ 11. –
Que voulez-vous dire par "élégant", et pouvez-vous utiliser boost.phoenix et/ou C++ 11 lamdbas? – PlasmaHH
Il n'y a pas d'algorithmes 'int' en C++ (STL), les algorithmes sont génériques. – agibalov