STL - Set - sample(2)

2017. 1. 4. 23:03IT-개발/C및C++

반응형

set은 이미 있는 key 값을 추가할 수 없다(복수의 key 값을 사용하기 위해서는 multiset을 사용해야 한다). 참고로 특정 위치를 지정하여 추가를 하여도 정렬되어 저장한다.


// find로 찾은 Key 변경

#include <iostream>

#include <functional>

#include <set>

using namespace std;


int main()

{

set< int > set1;

set1.insert( 10 );


set1.insert( 15 );

set1.insert( 12 );

for( set<int>::iterator IterPos = set1.begin();

IterPos != set1.end(); ++IterPos )

{

cout << *IterPos << endl;

}


set<int>::iterator FindIter = set1.find( 15 );

if( FindIter != set1.end() )

{

*FindIter = 11;

}


cout << endl;

cout << "15를 검색 후 11로 변경한 후 set1의 모든 요소 출력" << endl;


for( set<int>::iterator IterPos = set1.begin();

IterPos != set1.end(); ++IterPos )

{

cout << *IterPos << endl;

}


return 0;

}


// 두 번째 위치의 요소 삭제

set1.erase( ++set1.begin() );


// set1의 처음과 마지막에 있는 모든 요소 삭제

set1.erase( set1.begin(), set1.end() );


// key가 10인 요소 삭제

set1.erase( 10 );


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

}

};


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;

}

cout << 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;

}


중복 Key를 저장하기 위해서는 multiset을 사용해야 한다.






'IT-개발 > C및C++' 카테고리의 다른 글

STL - algorithm - find  (0) 2017.01.04
STL - algorithm  (0) 2017.01.04
STL - Set - sample(1)  (0) 2017.01.04
STL - map - sample(2)  (0) 2017.01.04
STL - map - sample(1)  (0) 2017.01.04