🐣 알고리즘 삐약/✌️알고리즘 개념 잡기

[Set] Set 집합 | C++

우주수첩 2022. 4. 20. 02:06
728x90

Set

  • 집합을 관리하기 위한 data structure
  • Set library는 중복을 허용하지 않는다.
  • C++에서는 set library가 balanced binary search tree (== red-black tree)로 구현되어 있기 때문에 기본적인 searching과 update 모두 O(log n) 시간에 수행 가능하다.
  • c++에서는 set의 element간에 순서가 정해지지 않은 경우 사용할 수 있는 unorderd_set_library를 지원한다.
    • 이는 hash table로 구현되어 있으며 모든 연산을 average O(1)에 구현 가능하다
      • 근데 이제 경진대회에서는 쓰지 않음을 곁들인...

 

 

#include <set> 헤더파일 include 진행

namespace 를 사용하면 더 효율적으로 사용 가능

#include <set>
using namespace std;

 

 

#  set 변수 선언

set<int> s;

 

 

# set.insert(n)  : set에 원소 n 삽입

int main(void) {
	set<int> s;
	s.insert(3);
	s.insert(2);
	s.insert(5);
	s.insert(6);
}

 

# set.count(n) : set의 element 중 n의 개수를 반환한다. 

  • set은 중복을 포함하지 않기 때문에 0 or 1만 반환한다.
  • 중복된 값을 관리하고 싶은 경우 multitest를 사용한다.
	cout << s.count(3) << '\n';  
	cout << s.count(4) << "\n";
    
    // set 안에 값이 있을 경우 1
    // set 안에 값이 없을 경우 0

 

 

# set.erase(n) : set에서 element n을 삭제한다.

  • 궁금해서 set 안에 없는 원소도 삭제 해 봤는데 아무 일도 일어나지 않았다고 한다.
s.erase(3); 
s.erase(7);

 

 

 

# set의 모든 element에 접근하는 방법

  •  set은 vector 처럼 index operator로 접근할 수 없다
cout << s.size() << "\n";
	for (auto x : s) {
		cout << x << "\n";
	}

 

 

# set에서 특정 element 찾기

auto it = s.find(3);
	if (it == s.end()) {
		cout << "this element is not founded\n";
	}

 

728x90

'🐣 알고리즘 삐약 > ✌️알고리즘 개념 잡기' 카테고리의 다른 글

[queue] Priority Queue  (0) 2022.04.20
[Map] Map | C++  (0) 2022.04.20
[Linear Data Structures] Stack / Queue  (0) 2022.04.20
[Linear Data Structures] Deque  (3) 2022.04.20
[Linear Data structures] Vector  (0) 2022.04.20