STL - Set - sample(1)

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

반응형

Set?


map과 비슷하지만 다른 점은 map은 key와 값을 한 쌍으로 저장하지만 set은 key만 저장한다. set도

map과 같이 key를 중복으로 저장할 수 없다. 만약 key를 중복으로 사용하고 싶다면 multiset을 사용해야 한다. 사용방법은 set과 거의 같다. set은 map과 같이 이진 탐색 트리 자료구조를 사용한다.


set은 자료를 저장할 때 내부에서 자동으로 정렬하고, map

과 다르게 key만 저장한다. set은 다음과 같은 조건일 때 사용하면 좋다.

1 정렬해야 할 때

2 key가 있는지 없는지 알아야 할 때

3 많은 자료를 저장하고, 검색 속도가 빨라야


set 컨테이너를 쓰려면 먼저 헤더 파일을 포함해야 한다.

#include <set>


보통 set을 사용하는 방법은 다음과 같다.

set< key 자료형> 변수 이름

set< int > set1;


map과 사용방법이 비슷하죠? 다만, set은 위와 같이 key만 저장한다. 위에서는

key로 int 타입을 사용했다.


set은 map과 같이 기본적으로 오름차순으로 정렬을 한다. 만약 이것을 내림차

순으로 바꾸고 싶거나 key의 자료형이 기본형이 아니란 사용자 정의형이라면 함

수 객체로 정렬 방법을 제공해야 한다.

먼저 set의 key가 기본형이고 내림차순으로 정렬하고 싶다면 STL의 greater 알

고리즘을 사용하면 된다.

set< key 자료형, 비교 함수 > 변수 이름

set< int, greater<int> > set1;

만약 key가 기본형이 아니고 Player 이라는 클래스를 사용하고 Player의 멤버

중 HP를 비교하여 정렬하고 싶다면 아래와 같이 하면 된다.


class Player

{

public:

Player() {}

~Player() {}

int m_HP;

};


template< typename T >

struct HP_COMPARE : public binary_function< T, T, bool >

{

bool operator() (T& player1, T& player2) const

{

return player1.m_HP > player2.m_HP;

}

};


int main()

{

set< Player, HP_COMPARE<Player> > set1;

return 0;

}


set< int > set1;


// key 1을 추가.

set1.insert( 1 );


// 추가했는지 조사 하고 싶을 때는

pair< set<int>::iterator, bool > Result;

Result = set1.insert( 1 );

if( Result.second )

{

// 추가 성공

}

else

{

// 추가 실패

}




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

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