블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,756
Today5
Yesterday73

'Set'에 해당되는 글 1건

  1. 2009.07.23 stl set

stl set

Study/C++ / 2009.07.23 18:38

내가 애용하려는 C++ 라이브러리 중 STL 이란 것이 있다.

어찌보면 C++ 의 꽃이라고도 할 수 있는 이 라이브러리 중 내가 주로 쓰는 것은 

vector 와 map 타입인데, 가끔 이것들이 가진 데이터의 중복허용이라는 기능상 

제한으로 인해 곤란할 때가 있다. 

이를 위해 해결책으로 set 이란 타입을 사용할 수 있다고 되어 있기에 

어떻게 이 타입을 쓰는 것인 지 알아보려 하였는데, 

실망스럽게도 딱 한눈에 잘 설명해 놓은 사이트가 잘 없어 고생을 한 끝에 

별 것도 아닌 사용법을 익히게 되어 여기 정리를 해둔다. 

set 은 vector 처럼 data 만을 key 없이 추가할 수 있는 반면, 

vector 나 map 과는 달리 중복된 데이터를 허용하지 않는다. 

1. 선언 

예를 들어, integer 의 set 이라면 

    set<int> sIntegerSet; 

이런 식으로 선언할 수 있다. 

만약 custom type 의 set 이라면 

    set<CustomeType, LessFunctionClass> sCustomTypeSet;

 이런 식으로 선언해야 한다. 

여기서 주목할 것은 바로 LessFunctionClass 인데, 이는 

CustomType 의 데이터의 대소관계, 즉 '<' 관계를 

bool 형태로 return 하는 operator() 함수를 

member function 으로 가지는 클래스 

이다. 

일반적으로 대소관계가 정의되어 있는 타입, e.g. int, double 등등, 이 아니라면 

대소관계를 알 수 없기에, 중복여부를 체크할 수가 없게 된다. 

So, set 에는 대소관계를 정의한 '클래스' 를 두번째 Template Class 로 주어야 하는 것이다. 

이 말을 써놓으면 될 것을, 무신놈의 이상한 소리만하거나 아예 언급을 안하는 

사이트들, 너무 많다!!! 

그럼 LessFunctionClass 를 정의해보자. 

class LessFunctionClass
{
    public: 
        LessFunctionClass() { }
        ~LessFunctionClass() { }

        bool operator()(const CustomType & lCustomType, const CustomType & rCustomType)
        {
              // return true if lCustomType is less than rCustomType
              // otherwise, return false
        }
}; 

2. 데이터의 추가
CustomType customeTypeData;
set<CustomType, LessFunctionClass> sCustomType; 

// 데이터 추가
sCustomType.insert(customTypeData); 

3. 데이터의 삭제
CustomType customTypeData;
set<CustomType, LessFunctionClass> sCustomType;
set<CustomType, LessFunctionClass>::iterator itCustomType;

// 데이터를 찾아서 해당 데이터에 대한 포인터를 iterator 로 받음.
itCustomType = sCustomType.find(customTypeData);

// iterator 가 end() 와 다르면, 데이터가 있단 뜻.
if (itCustomType != sCustomType.end())
{
    // 데이터를 지움.
     sCustomType.erase(itCustomType);
} 

이외의 기능은 다른 STL type 과 다르지 않으므로 그리 어렵지 않게 할 수 있다.
정말 프로그래밍 사이트들, 어렵지 않은 건 쉽게 쉽게 좀 써놔라.

[출처] STL set|작성자 요이나

'Study > C++' 카테고리의 다른 글

EC++ 2. define 대신 const, enum, inline 쓰기  (0) 2009.07.29
How to Use __declspec(dllexport) in an MFC Extension DLL  (0) 2009.07.26
stl set  (0) 2009.07.23
bitarray 제작, 활용  (0) 2009.07.20
bitarray  (0) 2009.07.18
Proxy clss  (0) 2009.07.16
Posted by 붕대마음
TAG ,

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함