// vector を並べ替え(降順)
// algorithm の sort を使用(降順用に関数オブジェクト生成)


#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

// 降順を判断するための関数オブジェクト
// 第1引数が第2引数より大きいときのみ 真
// (*) a >= b ; ではダメです。
//     sortの仕様( foo(a,b) == foo(b,a) が成立したらダメ)
bool greater( const int &a, const int &b )
{
	return a > b ;
}


int
main( ) {
	cout << "[vector10] sort(降順) vector" << endl ;

	vector<int>  iVec;

	cout << "vector size = " << iVec.size( ) << endl ;

	iVec.push_back(  7 );
	iVec.push_back(  9 );
	iVec.push_back(  8 );

	cout << "vector size = " << iVec.size( ) << endl ;

	for ( vector<int>::iterator i = iVec.begin( ) ; i != iVec.end( ) ; i++ ) {
		cout << *i << endl ;
	}

	vector<int>::iterator first = iVec.begin( );
	vector<int>::iterator last  = iVec.end( );

	sort( first, last, greater );

	cout << "vector size = " << iVec.size( ) << endl ;

	for ( i = iVec.begin( ) ; i != iVec.end( ) ; i++ ) {
		cout << *i << endl ;
	}

	cout << "size( )     = " << iVec.size( ) << endl ;
	cout << "max_size( ) = " << iVec.max_size( ) << endl ;
	cout << "capacity( ) = " << iVec.capacity( ) << endl ;

	return 0;
}


//	比較条件を変えたい場合は、自分で関数オブジェクトを作成すれば
//	よい。


// end of file