#include <iostream>
#include <functional>
#include <set>
using namespace std;
class Player
{
public:
Player() {}
~Player() {}
int m_Level;
};
// 레벨이 높은 순으로 정렬
template< typename T >
struct LEVEL_COMPARE : public binary_function< T, T, bool >
{
bool operator() (const T& player1, const T& player2) const
{
return player1->m_Level > player2->m_Level;
//비교 할 때 이걸 사용하면 왼쪽의 m_level이 크면 true, 아니면 false를 리턴함
}
};
int main()
{
set< Player*, LEVEL_COMPARE<Player*> > PlayerList;
Player* pPlayer1 = new Player; pPlayer1->m_Level = 10;
PlayerList.insert( pPlayer1 );
Player* pPlayer2 = new Player; pPlayer2->m_Level = 45;
PlayerList.insert( pPlayer2 );
Player* pPlayer3 = new Player; pPlayer3->m_Level = 5;
PlayerList.insert( pPlayer3 );
Player* pPlayer4 = new Player; pPlayer4->m_Level = 15;
PlayerList.insert( pPlayer4 );
// 정 방향으로 출력( 레벨이 높은 순으로)
for( set< Player*, LEVEL_COMPARE<Player*> >::iterator IterPos =
PlayerList.begin();
IterPos != PlayerList.end(); ++IterPos )
{
cout << (*IterPos)->m_Level << endl;
}
cout << endl;
// 역 방향으로 출력( 레벨이 낮은 순으로)
for( set< Player*, LEVEL_COMPARE<Player*> >::reverse_iterator IterPos = PlayerList.rbegin();
IterPos != PlayerList.rend(); ++IterPos )
{
cout << (*IterPos)->m_Level << endl;
}
// pPlayer4를검색
set< Player*, LEVEL_COMPARE<Player*> >::iterator FindPlayer = PlayerList.find( pPlayer4 );
if( FindPlayer != PlayerList.end() )
{
cout << "pPlayer4를 찾았습니다" << endl;
cout << "pPlayer4 삭제" << endl;
PlayerList.erase( FindPlayer );
}
else
{
cout << "pPlayer4를 못찾았습니다" << endl;
}
cout << endl;
cout << "Total Player Count : " << PlayerList.size() << endl;
cout << endl;
PlayerList.clear();
if( PlayerList.empty() )
{
cout << "Player가 없습니다." << endl;
}
delete pPlayer1;
delete pPlayer2;
delete pPlayer3;
delete pPlayer4;
return 0;
}
'컴퓨터 과학 & 영상처리 관련 > C / C++' 카테고리의 다른 글
C언어 매크로 사용 시 statement는 do{} while (0)로 묶는다 (0) | 2013.06.18 |
---|---|
inline function (0) | 2013.03.02 |
c++ struct와 class의 차이 (0) | 2013.02.14 |
STL 알고리즘 분류 (0) | 2013.02.14 |
c++ reference(&) 에 대한 정보 (0) | 2013.02.14 |