STL map에서 원하는 것들을 처리하고 삭제하기

purewell의 이미지

map에서 key값 이외, second부분의 어떠한 값을 비교해서
해당 원소를 데이터 처리하고, 삭제하려고 합니다.

삭제될 원소는 다수가 될 수 있는데,
이럴 때 어떻게 해야하나요.

remove_if 쓰려고 했더니 안 되던데...

winner의 이미지

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 이라는 점 유의하세요.

purewell의 이미지

^ -^);;; 컴파일 오류입니다.
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

winner의 이미지

어쩐지 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 가 변화하는군요..

purewell의 이미지

답변 감사드립니다. ^ -^)=b

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

winner의 이미지

죄송합니다.

생각해보니 new 는 예약어군요... -_-. 앞으로는 신중히 글을 쓰겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.