STL set 선언시에 템플릿 인자 클래스...

kalstein의 이미지

STL set에서...custom structure가 아닌 char * 를 쓸일이 있었습니다.

new로 생성된 문자열을 저장해야했는데요 (일반적으로는 string을 사용하지만

C와 연계되는 모듈이라서 char * 를 써야했습니다)

algorithm쪽에서는 인자값들로 (ex. for_each) 함수포인터도 넘어가지않습니까?

근데 set 에서 Compare를 함수포인터로 선언했더니..

에러가 나면서 안되네요 -_-;;

operator() 를 가지는 클래스를 넘기면 (함수자 객체라고들 하죠?) 잘 되는데 말입니다.

algorithm쪽하고 좀 다른건가요? set헤더 파일을 봐도...별 다를게 없어보이는데...;;

doldori의 이미지

doldori의 이미지

set의 두 번째 type parameter는 값이 아니라 형(type)이어야 합니다.
따라서 여기에 함수 포인터를 직접 쓸 수는 없습니다.

bool compare(const char* a, const char* b)
{
    return strcmp(a, b) < 0;
}
 
struct CStringLess : public binary_function<char*, char*, bool>
{
    bool operator()(const char* a, const char* b) const
    {
        return strcmp(a, b) < 0;
    }
};
 
set<char*, compare> set1;  // error. "compare" is not a type
 
typedef bool (*CompareFunc)(const char*, const char*);
set<char*, CompareFunc> set2; // sytactically correct, but semantically incorrect
 
set<char*, CStringLess> set3; // ok