map에서 key값 이외, second부분의 어떠한 값을 비교해서 해당 원소를 데이터 처리하고, 삭제하려고 합니다.
삭제될 원소는 다수가 될 수 있는데, 이럴 때 어떻게 해야하나요.
remove_if 쓰려고 했더니 안 되던데...
compile 오류인가요?
혹시 remove_if 를 하고 난 후에 container 안에 든 원소 수가 줄어들지 않았다는 뜻인가요? STL 에서 algorithm 은 container 자체는 건드리지 않기 때문에 remove, remove_if, unique, unique_if 를 쓰신 후 반환되는 반복자를 사용해서 erase 해야 합니다.
map<int, int> test = 초기화; test.erase( remove_if( test.begin(), test.end(), 술어 ), test.end() );
STL 의 정렬 relation 은 strict weak ordering 이라는 점 유의하세요.
^ -^);;; 컴파일 오류입니다. Effective 같은 책에서는 remove_if는 선형 구조인 list/vector 등에서나 유용하다고 나와있습니다.
[url]http://snaiper80.cafe24.com/wiki/wiki.cgi?Remove_if와_map_같이_쓸_시에_컴파일_에러_문제_해결[/url]http://www.pie.pe.kr/wiki/moin.cgi/EffectiveStlSum1
구글에서 찾았는데, 삽질 좀 더 해봐야겠습니다.
_____________________________ 언제나 맑고픈 샘이가...http://purewell.biz
어쩐지 source 작성해서 compile 해보고 싶더라니...
map 은 pair<const key, value> 이기 때문에 변화가 불가능합니다. 즉 key 쪽에서 말이죠. 이유는 tree 구조를 통해 정렬된 상태를 유지하기 위해서겠죠.
반복문을 사용하시면서 지우실 것은 erase 해야겠네요.
굳이 algorithm 을 사용하시겠다면 remove_copy_if 에 새로운 map 의 삽입반복자를 넣어주어야겠네요.
map old = 초기화, new; remove_copy_if(old.begin(), old.end(), inserter(new, new.end()), 술어);
생각해보니 삽입반복자를 algorithm 에 넘기면 container 가 변화하는군요..
답변 감사드립니다. ^ -^)=b
죄송합니다.
생각해보니 new 는 예약어군요... -_-. 앞으로는 신중히 글을 쓰겠습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
좀더 자세히 올려주시길 바랍니다.
compile 오류인가요?
혹시 remove_if 를 하고 난 후에 container 안에 든 원소 수가 줄어들지 않았다는 뜻인가요? STL 에서 algorithm 은 container 자체는 건드리지 않기 때문에 remove, remove_if, unique, unique_if 를 쓰신 후 반환되는 반복자를 사용해서 erase 해야 합니다.
STL 의 정렬 relation 은 strict weak ordering 이라는 점 유의하세요.
^ -^);;; 컴파일 오류입니다.Effective 같은 책에서는 r
^ -^);;; 컴파일 오류입니다.
Effective 같은 책에서는 remove_if는 선형 구조인 list/vector 등에서나 유용하다고 나와있습니다.
[url]http://snaiper80.cafe24.com/wiki/wiki.cgi?Remove_if와_map_같이_쓸_시에_컴파일_에러_문제_해결[/url]
http://www.pie.pe.kr/wiki/moin.cgi/EffectiveStlSum1
구글에서 찾았는데,
삽질 좀 더 해봐야겠습니다.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
실수했다!! -_-
어쩐지 source 작성해서 compile 해보고 싶더라니...
map 은 pair<const key, value> 이기 때문에 변화가 불가능합니다.
즉 key 쪽에서 말이죠.
이유는 tree 구조를 통해 정렬된 상태를 유지하기 위해서겠죠.
반복문을 사용하시면서 지우실 것은 erase 해야겠네요.
굳이 algorithm 을 사용하시겠다면 remove_copy_if 에
새로운 map 의 삽입반복자를 넣어주어야겠네요.
생각해보니 삽입반복자를 algorithm 에 넘기면 container 가 변화하는군요..
답변 감사드립니다. ^ -^)=b
답변 감사드립니다. ^ -^)=b
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
또 실수했다!! -_-
죄송합니다.
생각해보니 new 는 예약어군요... -_-. 앞으로는 신중히 글을 쓰겠습니다.
댓글 달기