stl set

반응형

내가 애용하려는 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
bitarray 제작, 활용  (0) 2009.07.20
bitarray  (0) 2009.07.18
Proxy clss  (0) 2009.07.16
TAGS.

Comments