2017. 1. 4. 23:03ㆍIT-개발/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 |