|
2009년 03월 01일
데이터를 다루다 보면 벡터에 중복 된 데이터를 제거해야 할 경우가 발생합니다. 중복 된 데이터를 제거하는 방법이야 여러가지가 있겠지만 STL 맵을 이용하여 중복 된 데이터를 제거하는 방법에 대해서 알아보겠습니다. double x1[] = {-1.00, -1.00, -1.00, -1.00, -0.33, -0.33, 0.33, 0.33, 1.00, 1.00, 1.00, 1.00}; double x2[] = {-0.89, -0.89, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.89, 0.89}; STL 맵 중 멀티 맵이 아닌 일반 맵은 중복 Key를 허용하지 않습니다. 즉, 같은 Key의 데이터를 삽입하려고 하면 삽입이 되지 않지요. 이 원리를 이용하면 위 배열의 중복 된 값을 쉽게 제거할 수 있습니다. (x1[0], x2[0])의 데이터를 문자열로 변환 후 이 값을 키로 만듭니다. 예를 들어 "-1.00#-0.89" 처럼 말이죠. 이때, 반드시 중간에 '#'과 같은 구분자를 주도록 합니다. 이렇게 구분자를 넣어주는 이유는 0.0이란 값과 10이란 값을 위의 방법으로 문자열로 변환 하는 경우 "0.010"이란 값이 나옵니다. 그런데 0.01이란 값과 0이란 값 또한 위 방법으로 문자열로 변환하면 "0.010"이 됩니다. 이럴 경우를 대비하여 각 값 간 사이에 구분자를 꼭 붙여주도록 합니다. 이렇게 Key를 만들었으면 값으로 현재 배열의 index를 줍니다. 그럼 중복 되는 값의 배열 index는 제외한 체 map에 삽입이 되게 됩니다. 그 후 맵을 순회 하면서 map의 저장 된 value 즉, 배열의 index를 각 배열에 적용하여 중복 된 데이터의 첫번째 값만 빼내어 vector에 담습니다. 위 설명을 그림으로 표현하면 아래와 같습니다. ![]() ![]()
// RepeatDataFilter.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <map> using namespace std; template<typename T> int nSize = (int) arg_refVtrInX1.size(); _stprintf(szBuf, _T("%f#%f"), arg_refVtrInX1[i], arg_refVtrInX2[i]); map<string, int>::iterator it; int _tmain(int argc, _TCHAR* argv[]) vector<double> vtrInitX1, vtrInitX2; int nArr = (int) (sizeof(x1) / sizeof(double)); for(int i=0; i<nArr; i++) RepeatDataFilter<double>(vtrInitX1, vtrInitX2, vtrX1, vtrX2); TRACE(_T("\n\n=========================================================\n\n")); return 0; *결과 =========================================================
========================================================= * 예제 프로젝트 RepeatDataFilter.zip |
ABOUT
![]() 새로운 도전을 위해 약 1년간 자리를 비웁니다. 그 동안 블로그에 방문해 주신 분들께 진심으로 감사드립니다. 1년 뒤 .NET 관련 양질의 정보를 가지고 돌아오겠습니다. by greenfrog 메모장
카테고리
최근 등록된 덧글
잘 봤습니다. 그런데 저 상태에서 하얀..
by 비니 at 07/24 안녕하세요. 내용이 좋아서 참고합니다... by 김현수 at 07/09 1년뒤....너무 멀군요... 도전 성.. by rince at 06/26 좋은 내용이네요 많은 도움이 되었습니다.. by 이준배 at 06/04 좋은 정보 감사합니다^^ by 코즈 at 06/03 사랑합니다 by 최곱니다 at 05/12 좋은정보 감사합니다. by 이창열 at 05/11 좋은 정보 잘보고갑니다 그리고 제가 .. by Cherry at 04/27 답글이 늦어서 죄송합니다. 요즘 이래저.. by greenfrog at 04/20 좋은 정보 잘보고 갑니다^^ 도움이 많.. by 토끼 at 04/15 좋은 정보 감사합니다. 다음에 써먹어야.. by neptunex at 03/26 ㅎㅎ 잘 찾아보면 재미있는 플러그인 많.. by greenfrog at 03/22 예전에는 일부러 에러내고 그거찾아가는.. by 규학 at 03/13 아 ~ 그 일이었군요 ^^ 글 잘 봤어요 .. by greenfrog at 02/21 하나은행과 정말 생동감 넘쳤지요 ^^ by rince at 02/20 rince님의 생동감 넘치는 하루가 궁금.. by greenfrog at 02/20 어제, 그제 정말 생동감 넘치는 하루.. by rince at 02/19 저도 짬 비릴때 고참들이 웃기면 그것 .. by greenfrog at 02/19 전 자주 웃는 편이지요 ^^; 군대에선 .. by rince at 02/18 저도 이 만화 보고 어쩜 저런 생각 없는 .. by greenfrog at 02/17 최근 등록된 트랙백
자바로 작성된 프로그램 단 한번만 실..
by Start!!! 제 취향이 Oddly Enough와 안성맞.. by Oddly Enough 2009년 보기 시작하는 미드 by Pell's seer Blog [포토] 국민 여러분, 떡국 드시고 .. by Green Monkey Blog** MARVEL MOVIES : 아이언 맨 by 잠보니스틱스 ▶◀ 최진실씨, 삼가 고인의 명복을 .. by ** MY's kitchen ** 재미로 해보는 MBTI 검사 by A2공간 - 도움되는 글을 쓰자 러시아 극우조직 스킨헤드를 파헤친 기자 by Oddly Enough [Sleeping Through My Fingers].. by 바람나무, 생각가는대로 구글 크롬 안내서의 작지만 큰 실수 by Oddly Enough PETA, 돼지학대 농장 잠입취재 by Oddly Enough 병쭈니의 생각 by chrisjun82's me2DAY 준이아빠의 생각 by kkh1030's me2DAY 안철수가 말하는 "현대의 인재에.. by loading... 100% 이전블로그
이글루 파인더
|