-
뇌를 자극하는 C++ STL 7장) 연관 컨테이너(set, multiset, map, multimap)PROGRAMMING/STL 2024. 2. 29. 17:32
오늘은 연차! 행복한 목요일을 보내면서 연관 컨테이너에 대해 공부해보았씁니다~
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://m.hanbit.co.kr/store/books/book_view.html?p_code=B5912645820
set, multiset, map, multimap의 차이점
중복 허용 X 중복 허용 O key만 사용 set multiset key와 value 모두 사용 map multimap 🔹연관 컨테이너는 인터페이스(생성자, 멤버함수, 연산자)를 공유하므로 하나에 대해서만 정리하면 충분하다.
🔹기본 정렬 기준 : less조건자
🔹없는 멤버함수 : push_back(), push_front(), pop_back(), pop_front(), front(), back()
🔹찾기 연산에 뛰어난 성능을 보인다.(find(), lower_bound(), upper_bound(), equal_range(), count())
#include <iostream> #include <map> #include <set> using namespace std; int main() { set<int> s; // multiset<int> ms; map<int, int> m; s.insert(30); m.insert(pair<int, int>(5, 30)); s.insert(50); m.insert(pair<int, int>(1, 50)); s.insert(100); m.insert(pair<int, int>(2, 100)); s.insert(10); m.insert(pair<int, int>(4, 10)); s.insert(80); m.insert(pair<int, int>(3, 80)); set<int>::iterator s_iter; map<int, int>::iterator m_iter; s_iter = s.find(30); // find()없으면 end()와 같은 반복자 출력 if (s_iter != s.end()) cout << *s_iter << "가 s에 있다" << endl; else cout << "30이 s에 없다" << endl; m[5] = 3; // 추가 또는 갱신 for (m_iter = m.begin(); m_iter != m.end(); ++m_iter) cout << "(" << (*m_iter).first << ',' << (*m_iter).second << ")" << endl; // cout << "(" << *m_iter->first << ',' << *m_iter->second << ")" << endl; cout << endl; //[lower_iter, upper_iter) map<int, int>::iterator lower_iter; map<int, int>::iterator upper_iter; lower_iter = m.lower_bound(5); upper_iter = m.upper_bound(5); for (m_iter = lower_iter; m_iter != upper_iter; ++m_iter) cout << "(" << (*m_iter).first << ',' << (*m_iter).second << ")" << endl; return 0; }
'PROGRAMMING > STL' 카테고리의 다른 글
뇌를 자극하는 C++ STL 8장) 알고리즘_원소를 수정하는 알고리즘 (0) 2024.03.02 뇌를 자극하는 C++ STL 8장) 알고리즘_원소를 수정하지 않는 알고리즘 (2) 2024.03.01 뇌를 자극하는 C++ STL 6장) 시퀀스 컨테이너(vector, deque, list) (2) 2024.02.28 뇌를 자극하는 C++ STL 5장) STL 소개 (2) 2024.01.27 뇌를 자극하는 C++ STL 4장) 템플릿(함수 템플릿, 클래스 템플릿) (0) 2024.01.19