[C++]셋(Set)클래스 사용법

Posted 2007/08/28 16:58

1. 셋(Set)이란?

 셋(Set)은 multiset, map, multimap등과 같이 STL이 제공하는 자료형 중 하나이다.


2. 셋(Set)의 특징

 첫번째, 요소가 절대로 중복되지 않는다.

 두번째, 반복자(iterator)를 사용하여 접근한다.
 
 세번째, 자동적으로 정렬된 상태를 유지한다(숫자 등에 한하여).

 네번째, Template를 사용하여, 형식에 대하여 자유롭다.


3. 선언 방법

 set<형식> 사용할이름; 과 같이 선언하면 된다.
Example : set<int> iSet;


4. 접근 방법

 접근 방법엔 두 가지가 있다.

 ㄱ. iterator를 사용한 접근 방법.
set<형식>::iterator iterator이름; 과 같이 iterator를 선언 한 후, 사용한다. iterator는 이미 아시겠지만, 주소값을 가지게 된다. 때문에, iterator가 지정하는 값을 표현하려면 포인터(*)를 사용해주자.

 ㄴ. 요소 자체를 인덱스처럼 사용하여 접근한다. 말이 어려울 수도 있으나, 예제를 보면 매우 간단하다.


5. 요소 추가, 삭제 방법

 set.insert()과 set.erase()
 요소를 추가하고 싶다면, set.insert(요소) 이런식으로 써주자. 그리고 해당 요소를 지우고 싶다면 set.erase(요소) 이런식으로 사용해주면 된다.


6. Set사용 예제

#include <set>
#include <stdio.h>

using namespace std;

void main()
{
     set<int> iSet;

     for(int i=19; i>0 ;i-=3)
          iSet.insert(i); //역순으로 데이터를 추가한다.

     set<int>::iterator itSet;

     printf("Set : ");
     for(itSet = iSet.begin(); itSet!= iSet.end(); itSet++)
          printf("%d ",*itSet);//하지만, 결과는 오름차순으로 정렬된 상태!
     printf("\n");

     for(int i=1;i<=10;i++)
          iSet.insert(i); //기존 데이터에 1부터 10까지 모든 데이터를 추가.

     printf("Set : ");
     for(itSet = iSet.begin(); itSet!= iSet.end(); itSet++)
          printf("%d ",*itSet); //데이터는 중복되지 않는다.
     printf("\n");

     for(int i=0;i<=19;i+=2)
          iSet.erase(i); //데이터를 지운다. 데이터가 없어도 에러는 나지않는다.

     printf("Set : ");
     for(itSet = iSet.begin(); itSet!= iSet.end(); itSet++)
          printf("%d ",*itSet);
     printf("\n");

     set<int>::reverse_iterator ritSet; //내림차순으로 정렬하기

     printf("ReverseSet : ");
     for(ritSet = iSet.rbegin(); ritSet != iSet.rend(); ritSet++)
          printf("%d ",*ritSet);
     printf("\n");
}

[Result]
Set : 1 4 7 10 13 16 19
Set : 1 2 3 4 5 6 7 8 9 10 13 16 19
Set : 1 3 5 7 9 13 19
ReverseSet : 19 13 9 7 5 3 1

** 이 글의 저작권은 모두 저자에게 있습니다.
   수정, 배포시 저작권을 표시해주시기 바랍니다.
** 오타, 잘못된 내용이 있으면 적극적으로 알려주시기 바랍니다 :)
** 질문사항 또한 적극적으로 받겠습니다.

Copyright (c) NEWMS 2007 All right Reserved.
크리에이티브 커먼즈 라이선스
Creative Commons License
Write your message and submit
« PREV : 1 : ... 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : ... 35 : NEXT »