1. std::set 이란?
"std:set은 key 유형의 고유한 객체 (정렬된)집합을 포함하는 연관 컨테이너를 말한다.." 라고 보통 영어로 표현되어 있다.
std::set is an associative container that contains a sorted set of unique objects of type Key.
출처는 마지막에 있습니다.
위의 말이 이해가 되지 않는다면, 아래 글과 예제를 보면서 생각한다면 훨씬 이해하기 쉬우리라 믿는다.
우선, std:set을 사용하려면, 다음의 헤더가 필요하다.
1 | #include <set> |
2. std:set의 장점 및 특징은?
1. 중복된 요소는 허용하지 않는다. 다시 말하면, 고유한 요소만 포함할 수 있다.
2. std::set은 템플릿 인자와 같은 특정한 타입의 요소도 포함할 수 있다.
위의 내용을 아래 예제 코드에서 확인해보자.
1 2 3 | std::set<int> // int 인자만 포함한다. class Example; std::set<Example> // Example 클래스 객체만 포함한다. |
3. std:set는 내부적으로 balanced binary tree 형식으로 요소들이 저장되어 있다.
4. std:set은 두 요소를 '<' operator를 이용하여 비교할 수 있다.
또한, 사용자가 외부적으로 정렬 기준을 전달하면, 기본 operator인 '<' 를 대신해서 사용한다.
5. std:set은 4번에서 말한 비교 방법을 기준으로 삽입되는 요소들을 정렬해놓는다.
3. std:set의 사용 예.
std::set을 이용한 간단한 예이다.
예를 보면 쉽게 이해할 것이다.
다음 예제에서 std::set의 사용방법을 확인해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <set> #include <string> int main() { std::set<int> setNum; // std::set 요소 추가. setNum.insert(5); setNum.insert(1); setNum.insert(3); setNum.insert(4); setNum.insert(2); // std::set의 사이즈 확인. std::cout << "Set Size : " << setNum.size() << std::endl; // std::set의 요소 출력. for (std::set<int>::iterator it=setNum.begin(); it!=setNum.end(); ++it) std::cout << ' ' << *it; std::cout << "\n"; // std::set 요소 찾기. std::set<int>::iterator it = setNum.find(3); if (it != setNum.end()) { std::cout << "found number : \'3\'" << std::endl; } else { std::cout << "not found number : \'3\'" << std::endl; } // std::set 요소 삭제. setNum.erase(3); for (std::set<int>::iterator it=setNum.begin(); it!=setNum.end(); ++it) std::cout << *it << std::endl; return 0; } | cs |
한 가지 알아야 할 점이 있다.
std::set의 요소들을 순차적으로 방문하려면 다음 코드를 이해 해야 한다.
iterator는 순차적으로 set의 요소를 방문하는 기능이라고 생각하면 된다.
iterator의 기능을 안다면, 다음 코드를 이해할 수 있을 것이다.
1 | for (std::set<int>::iterator it=setNum.begin(); it!=setNum.end(); ++it) |
iterator 기능을 자세히 알아보려면 다음을 참고하자.
4. std:set의 요소 검색하기.
std::set에 요소를 넣은 후, 찾고자 하는 요소가 있는 지 확인할 필요가 있다.
이럴 경우, std::set::find를 사용할 수 있다.
1 | std::set::find | cs |
1 2 3 4 5 6 7 8 | // std::set 요소 찾기. std::set<int>::iterator it = setNum.find(3); if (it != setNum.end()) { std::cout << "found number : \'3\'" << std::endl; } else { std::cout << "not found number : \'3\'" << std::endl; } | cs |
위의 예제에서는 3이 std::set에 추가되어 있으므로, "found number : 3" 이 출력될 것이다.
5. std::set의 요소 제거하기.
std::set의 요소를 삭제할 경우는 다음 명령어를 사용할 수 있다.
1 | std::set::erase | cs |
1 2 3 | setNum.erase(3); for (std::set<int>::iterator it=setNum.begin(); it!=setNum.end(); ++it) std::cout << *it << std::endl; | cs |
출처 : http://en.cppreference.com/w/cpp/container/set
http://thispointer.com/stdset-tutorial-part-1-set-usage-details-with-default-sorting-criteria/
'프로그래밍 > C || CPP' 카테고리의 다른 글
[C++11] DEFAULT / DELETE 키워드 정리 (0) | 2018.05.02 |
---|---|
[STL] STL 반복자 정리 (iterator) (1) | 2018.04.29 |
[C++] 키워드 constexpr 알아보기 (5) | 2018.04.23 |
[C++] string::find / string::npos 를 이용한 단어 유무 찾기 (1) | 2017.12.09 |
[C & C++] if 앞 조건문이 false 경우, 뒷 조건문은 실행할까? (1) | 2017.11.24 |
댓글