관심있는 것들 정리
map간 병합할 때 중복항목 제거하고 merge 하는 방법 본문
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 |