본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

STL 쓸 때 비교연산? 이거 좀 햇갈리던데

#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;
}