set<string *> ssp;
ssp.insert(new String("Anteater"));
ssp.insert(new String("Wombat"));
ssp.insert(new String("Lemur"));
ssp.insert(new String("Penguin"));
이렇게 되면 set은 내부적으로 문자열을 참고하는게 아니고 string *(포인터) 자체의 값을 참고한다...
즉, 정렬 같은걸 해도 포인터 자체의 값으로 정렬한다는 소리...
해결법은?
set<string *> ssp; 는
set<string *, less<string *>> ssp; 의 형태이며, 이것은 다시
set<string *, less<string*>, allocator<string *>> ssp; 이렇게 된다.
이번 항목에서는 할당자는 관심사가 아니므로 무시.
즉 less라는 비교 함수자 클래스를 직접 만들어야 한다.
string * 포인터를 매개 변수로 받아, 이 포인터가 가리키는 string끼리 비교 후 bool을 리턴~
'Effective STL' 카테고리의 다른 글
| 항목 20 : 포인터를 저장하는 연관 컨테이너에 대해서는 적합한 비교(비교 함수자) 타입을 정해주자. (0) | 2011/09/15 |
|---|---|
| 항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자. (0) | 2011/09/15 |
| 항목 18 : vector<bool> 보기를 돌같이 하자. (0) | 2011/09/14 |
| 항목 17 : 쓸데없이 남은 용량은 "바꿔치기(swap) 묘수"를 써서 없애 버리자. (0) | 2011/09/14 |
| 항목 16 : 기존 C API에 vector와 string을 넘기는 방법을 알아두자. (0) | 2011/09/14 |
| 항목 15 : 잊지 말자! string은 여러 가지 방식으로 구현되어 있다는 사실을... (0) | 2011/09/14 |