STL - Set, Multimap, Multiset

이승덱·2021년 7월 21일

CPP

목록 보기
57/70
#include <iostream>

#include <vector>

#include <list>

#include <deque>

#include <map>

#include <set>

using namespace std;

// set, multimap, multiset

int main()

{

 // SET

 //( Key,Value )

 // set은 key와 value가 같은 값

 set<int> s;

 // 넣고

 s.insert(10);

 s.insert(30);

 s.insert(20);

 s.insert(40);

 s.insert(70);

 s.insert(60);

 s.insert(50);

 s.insert(80);

 s.insert(90);

 // 다만 value를 따로 관리하지 않기 때문에

 // s[10]=10; 와 같은 문법은 지원하지 않음

 // 빼고

 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;

 }

 cout << "==============================================" << endl;

 // Multimap

 // 중복키를 허용하는 Map

 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));

 // m[1]=500과 같은 문법은 지원하지 않음. 혼동을 줄이기 위함

 // 빼고

 //unsigned int count=mm.erase(1); // 동일한 키를 가진 모든 데이터를 삭제. 삭제한 데이터 개수를 반환

 // 찾고

 //multimap<int,int>::iterator itFind= mm.find(1); //가장 앞에 있는 데이터 하나를 반환

 //if(itFind!=mm.end())

 // mm.erase(itFind); //특정 키를 가진 데이터 하나만 삭제하길 원할 경우

 pair<multimap<int, int>::iterator, multimap<int, int>::iterator> itPair;

 itPair = mm.equal_range(1); //1이 시작하는 데이터가 first, 1이 끝나는 데이터가 second에 들어감

 mm.lower_bound(1); //1이 시작하는 데이터의 iterator

 mm.upper_bound(1); //1이 끝나는 데이터의 iterator

 

 

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

 cout << (*it).first << " " << (*it).second << endl;

 }

 for (multimap<int, int>::iterator it = mm.lower_bound(1);it != mm.upper_bound(1);++it) {

 cout << (*it).first << " " << (*it).second << endl;

 }

 cout << "==============================================" << endl;

 multiset<int> ms;

 // 넣고

 ms.insert(100);

 ms.insert(100);

 ms.insert(100);

 ms.insert(200);

 ms.insert(200);

 // 찾고

 multiset<int>::iterator findId = ms.find(100); //Key가 100인 데이터 하나만 찾음

 pair<multiset<int>::iterator,multiset<int>::iterator> itPair2= ms.equal_range(100); //100이 시작하는 데이터가 first, 1이 끝나는 데이터가 second에 들어감

 ms.lower_bound(100); //100이 시작하는 데이터의 iterator

 ms.upper_bound(100); //100이 끝나는 데이터의 iterator

 for (multiset<int, int>::iterator it = itPair2.first;it != itPair2.second;++it) {

 cout << (*it)<< endl;

 }

 for (multiset<int, int>::iterator it = ms.lower_bound(100);it != ms.upper_bound(100);++it) {

 cout << (*it)<< endl;

 }

}
profile
공부 기록용 블로그입니다

0개의 댓글