관심있는 것들 정리

map간 병합할 때 중복항목 제거하고 merge 하는 방법 본문

programming

map간 병합할 때 중복항목 제거하고 merge 하는 방법

내공강화 2024. 8. 31. 21:37

c로 코딩을 할 경우, sorting 순서, 중복항목 체크를 직접해 주어야 하지만 c++의 경우 이를 간단히 처리해준다.

map에서 key 값을 기준으로 sorting하면서 merge가 되며, 간단히 int 타입을 key로 하는 map에 대한 예제는 다음과 같다.

#include<iostream>
#include<map>
#inclucde<string>

using namespace std;

int main()
{
    map<int, string> tmap1 = {{10, "10"}, {1, "1"}, {3, "3"}, {20, "20"}};
    map<int, string> tmap1 = {{10, "10"}, {5, "5"}, {6, "6"}, {20, "20"}};
    
    tmap1.insert(tmap2.begin(), tmap2.end());
    
    for(auto& p: tmap1) {
        cout << p.first << "   " << p.second << "\n";
    }
    
    return 0;
}

이를 컴파일 후 실행하면

$./test
1   1
3   3
5   5
6   6
10   10
20   20
$

 

그리고 merge 후 처음 n개 또는 마지막 n개만 남기겠다 라고 한다면, 다음과 같이 iterator를 이용하면 된다.
다음 예는 처음 4개의 항목만 남기는 예제이다

#include<iostream>
#include<map>
#inclucde<string>

using namespace std;

int main()
{
    map<int, string> tmap1 = {{10, "10"}, {1, "1"}, {3, "3"}, {20, "20"}};
    map<int, string> tmap1 = {{10, "10"}, {5, "5"}, {6, "6"}, {20, "20"}};
    
    tmap1.insert(tmap2.begin(), tmap2.end());
    
    for(auto& p: tmap1) {
        cout << p.first << "   " << p.second << "\n";
    }
    
    cout << "tmap1 size = " << tmap1.size() << "\n";
    
    for(auto len=tmap1.size(); len > 4; --len)
    {
        auto it = tmap1.end();
        it--;
        tmap1.erase(it);
    }
    
    cout << "tmap1 size = " << tmap1.size() << "\n";
    for(auto& p: tmap1) {
        cout << p.first << "   " << p.second << "\n";
    }
    
    return 0;
}

위 코드를 컴파일 후 실행하면 (참고로 c++17로 표준을 선택하여 컴파일 하였음)

$./test
1   1
3   3
5   5
6   6
10   10
20   20
tmap1 size = 6
tmap1 size = 4
1   1
3   3
5   5
6   6
$

 

반응형

'programming' 카테고리의 다른 글

c++ std::istream을 이용해 입력 처리하기  (0) 2024.09.01
programming language 별 while  (0) 2017.01.30
programming language 별 if else 정리  (0) 2017.01.29
GCC inline assembly guide  (0) 2012.02.25
global hotkey 사용 예제  (0) 2012.02.25