#include <algorithm>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
using namespace std;
class Player
{
public:
Player( const string& first_name = "John",
const string& last_name = "Doe",
int height = 60,
float field_goal_percentage = 10 );
bool operator<( const Player& rhs ) const;
float field_goal_percentage() const;
string first_name() const;
int height() const;
void height( int& feet, int& inches ) const;
string last_name() const;
void print() const;
private:
float field_goal_percentage_;
string first_name_;
int height_;
string last_name_;
};
inline
Player::Player( const string& first_name, const string& last_name,
int height, float field_goal_percentage )
: field_goal_percentage_( field_goal_percentage ),
first_name_( first_name ), height_( height ),
last_name_( last_name )
{}
inline
float Player::field_goal_percentage() const
{ return field_goal_percentage_; }
inline
string Player::first_name() const
{ return first_name_; }
inline
int Player::height() const // in inches
{ return height_; }
inline
void Player::height( int& feet, int& inches ) const
{
feet = height() / 12;
inches = height() % 12;
}
inline
string Player::last_name() const
{ return last_name_; }
void Player::print() const
{
int feet, inches;
height( feet, inches );
string name( first_name() );
name += " ";
name += last_name();
cout << setw( 20 ) << left << name << feet << " feet " << inches
<< " inches Field goal percentage: "
<< field_goal_percentage() << endl;
}
inline
bool Player::operator<( const Player& rhs ) const
{ return last_name() < rhs.last_name(); }
inline
bool greater_height( const Player& lhs, const Player& rhs )
{ return lhs.height() > rhs.height(); }
inline
bool greater_field_goal_percentage( const Player& lhs,
const Player& rhs )
{ return lhs.field_goal_percentage()
> rhs.field_goal_percentage(); }
int main( )
{
list<Player> players;
players.push_back( Player( "A", "F", 78, 0.422 ) );
players.push_back( Player( "B", "G", 72, 0.392 ) );
players.push_back( Player( "C", "H", 85, 0.555 ) );
players.push_back( Player( "D", "I", 90, 0.531 ) );
players.push_back( Player( "E", "J", 84, 0.502) );
// sort by name
players.sort();
for_each( players.begin(), players.end(),mem_fun_ref( &Player::print ) );
// descending sort by height
players.sort( greater_height );
for_each( players.begin(), players.end(),mem_fun_ref( &Player::print ) );
// descending sort by field goal percentage
players.sort( greater_field_goal_percentage );
for_each( players.begin(), players.end(),mem_fun_ref( &Player::print ) );
}