STL - set에서 find_if 쓰려는데.. 힌트 부탁드립니다 ㅎ
글쓴이: lacovnk / 작성시간: 목, 2005/04/14 - 10:17오전
Class A { public: int memberA; blabla.... } set <A*> s;
set s에서 memberA가 특정 값인 원소를 얻으려고 하는데 어렵군요;
생각해본것이..
http://ccl.northwestern.edu/tisue/cs311/fall-00/notes/stl-functions.html
요거에서 보고 function class를 만드려고 했는데 예제에서는 set의 원소를 직접 비교하는 방법이라..
일단 되든 말든 만들었더니 물론 안되더군요 -_-;
class ACompare { private: int a; public: ClientCompare(int newa){this->a = newa;} bool operator() (A* a) const {return (a->memberA == this->a} };
으음. 제가 컨테이너를 잘못 선택한 것일까요?
순서는 상관없고,
1. 컨테이너의 모든 원소에 대해서 일정한 작업을 해야하고
2. 컨테이너의 원소를 검색해야합니다 (위에서 의도하는..)
조언 부탁드립니다 ㅠㅠ
Forums:
this-> 는 웬만하면 쓰지 마세요 -_-;;find_if
this-> 는 웬만하면 쓰지 마세요 -_-;;
find_if(s.begin(), s.end(), ACompare(특정값))
이걸로 안되나요?
에러가 나네요;
혹시 실수가 있을까봐 코드를 적습니다. ㅎㅎ
덧. 전 명시적으로 this를 일부러 쓰고 있었는데.. 어떤 이유가 있는건가요? 궁금해요~ ㅎ (구글에서 this가 일반적인 단어라 검색이 안되는군요 ㅎ)
음...
일단 find_if는 시퀀스 알고리즘이라 set에 적용하는 것은 비추입니다. set은 자신만의 find멤버 함수가 있지요.
굴구 set<A*>이렇게 하는 것은 set을 쓸 이유를 날려버립니다.
트리를 구성할 때 주소값의 대소를 가지고 하는데 이건 set을 쓰는 이유가 될 수 없습니다. 구지 한다면
set<A*, (여기에 알맞는 비교 함수 객체)>을 지정해 줘야합니다.
글구..함수 객체의 사용은 이상이 없어 보입니다..-.-;;
리턴값이 잘못됐군요..
find_if는 반복자를 리턴합니다.
clientCompare 를 동적으로 할당해놓고 사용을 안하시는군요 -_
clientCompare 를 동적으로 할당해놓고 사용을 안하시는군요 -_-;
그리고 find_if의 리턴타입은 set::iterator 이지 Client* 가 아닙니다.
iterator 를 Client* 타입에 대입하려고 해서 에러가 나는군요.
기초가 부실하군요 흑
감사합니다 ㅠㅠ
지적을 듣고나서야 뭔가 이상하다는게 스르륵.. 이 아니라 파박 느껴지는군요
stl쪽 더 살펴봐야겠습니다; man이 없으니 번거롭군요;
http://oopsla.snu.ac.kr/~sjjung/stl/sel_2116.htm
요거 보고 다시 골라봐야겠습니다 으흐흐 :oops:
댓글 달기