C++프로그래밍/자료구조,알고리즘(추후확장)

연관 컨테이너

season97 2024. 10. 1. 11:52

※ 개인적인 공부를 위해 포스팅 하는 글입니다.


map

set

multimap

multiset

 

 

# set

set<int> s; // (key = Value)
// 나머지 특징들은 map과 동일하다. 키가 곧 값. 따라서 중복된건 빼고 정렬을해준다.
/*
    넣고 빼고 찾고 순회하고
*/
s.insert(10);
s.insert(20);
s.insert(80);
s.insert(90);
s.insert(50);
s.insert(40);
s.insert(60);
s.insert(70);

//빼고
s.erase(40);

//찾고
set<int>::iterator findIt = s.find(50);
if (findIt == s.end())
{
    cout << "못 찾음" << endl;
}
else
{
    cout << "찾음" << endl;
}

for (set<int>::iterator it = s.begin(); it != s.end(); ++it)
{
    cout << *it << endl;
}
//인덱스 접근 안댐.

ㆍ key 가 곧 value (key = value) 

나머지 특징들은 다 map과 동일하다. 넣고 빼고 찾고 순회하고

 

 

 

※ multi 시리즈는 동일한 특성이지만 중복을 허용한다.

#multimap

multimap<int, int>mm;
mm.insert(make_pair(1, 100));
mm.insert(make_pair(1, 200));
mm.insert(make_pair(1, 300));
mm.insert(make_pair(2, 400));
mm.insert(make_pair(2, 500));

/ mm[1] = 500; 이건 안된다.  insert로만 접근 가능

//빼고
/ mm.erase(1); 
//이렇게 빼면 키1에 대한건 다 날아간다.
unsigned int cnt = mm.erase(1); // 지운만큼 카운트도 반환해줌

//찾고
multimap<int,int>::iterator itFind = mm.find(1);
if (itFind != mm.end())
{
    mm.erase(itFind);
}

ㆍ 지우면 중복 키는 다 날아간다. 그리고 지운만큼 unsigned int를 반환해준다.

 

 pair<multimap<int, int>::iterator, multimap<int, int>::iterator> itPair;
 mm.equal_range(1);

 //따로따로 하고싶다면 이렇게.
 mm.lower_bound(1);  //시작
 mm.upper_bound(1);  //끝

 for (multimap<int, int>::iterator it = itPair.first; it != itPair.second; ++it)
 {
     cout << it->first << " " << it->second << endl;
 }

ㆍ equal_range는 1이 시작되는 키값을 first로 1이 끝나는위치를 secend로 반환해준다

ㆍ 따로 하고싶다면 lower과 upper을 이용하자

 

#multiset

ㆍ key가 곧 value였다. 중복된 데이터를 허용하는 set이다. 

얘도 위의 lower과 upper 키워드가 있고 equal_range도 그대로 있다!

 

'C++프로그래밍 > 자료구조,알고리즘(추후확장)' 카테고리의 다른 글

자주 쓰이는 알고리즘  (0) 2024.10.01
map  (3) 2024.09.30
deque  (0) 2024.09.30
list 구현해보기  (1) 2024.09.29
list와 list의 이터레이터  (0) 2024.09.29