C++에서 STL 세트 컨테이너 사용
-
std::set
을 사용하여 C++에서 Set Container Object 선언 -
insert
멤버 함수를 사용하여 C++에서 집합에 요소 삽입 -
find
멤버 함수를 사용하여 C++에서 주어진 키를 가진 요소의 반복자를 검색합니다 -
contains
멤버 함수를 사용하여 주어진 키를 가진 요소가 C++의 집합에 존재하는지 확인
이 기사는 C++에서 STL set
컨테이너를 사용하는 방법에 대한 여러 방법을 보여줍니다.
std::set
을 사용하여 C++에서 Set Container Object 선언
std::set
명령은 정렬 된 고유 개체 집합을 연관 컨테이너로 구현합니다. 요소는 기본적으로std::less
비교 함수로 정렬되지만 사용자는 두 번째 템플릿 인수로 사용자 지정 함수를 제공 할 수 있습니다. 동일한 헤더는 중복을 필터링하지 않고 여러 값을 저장할 수있는std::multiset
컨테이너도 제공합니다.
다음 예제에서는 이니셜 라이저 목록 생성자를 사용하여 두 세트 객체를 모두 생성합니다. 우리는 또한 주어진 키로 세트에 존재하는 요소의 수를 검색하는count
멤버 함수를 사용합니다. 이 함수는std::multiset
컨테이너에 더 내장되어 있지만std::set
개체에서 호출 할 때 동일한 함수를 사용하여 요소가 존재하는지 확인할 수 있습니다.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
template <typename T>
void printSet(set<T> s) {
for (const auto &item : s) {
cout << item << "; ";
}
cout << endl;
}
template <typename T>
void printMultiSet(multiset<T> s) {
for (const auto &item : s) {
cout << item << "; ";
}
cout << endl;
}
#define STR(num) #num
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
printSet(s1);
std::multiset<int> s2 = {1, 1, 1, 2, 2, 3};
printMultiSet(s2);
std::cout << STR(s2) << " contains " << s2.count(1) << "ones" << endl;
std::cout << STR(s2) << " contains " << s2.count(2) << "twos" << endl;
return EXIT_SUCCESS;
}
출력:
1; 2; 3;
1; 1; 1; 2; 2; 3;
s2 contains 3 ones
s2 contains 2 twos
insert
멤버 함수를 사용하여 C++에서 집합에 요소 삽입
insert
함수에는 여러 오버로드가 있지만 집합에 추가 할 요소를 나타내는 단일 인수를 사용하는 버전을 사용합니다. 이insert
오버로드는 반복기의std::pair
객체와bool
을 반환합니다.
후자는 삽입이 성공했는지를 나타내며, 그렇다면true
값을 갖습니다. 반면에 반복자는 작업이 성공하면 삽입 된 요소를 가리 킵니다. 실패하면 삽입을 방해 한 요소를 가리 킵니다. 삽입 작업은 컨테이너 크기에 대수 복잡성이 있습니다.
#include <cassert>
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
auto ret = s1.insert(5);
assert(*ret.first == 5);
if (ret.second) std::cout << "Inserted!" << endl;
ret = s1.insert(1);
assert(*ret.first == 1);
if (!ret.second) std::cout << "Not inserted!" << endl;
return EXIT_SUCCESS;
}
출력:
Inserted!
Not inserted!
find
멤버 함수를 사용하여 C++에서 주어진 키를 가진 요소의 반복자를 검색합니다
find
함수는 주어진 키를 사용하여 요소에 반복기를 리턴 할 수있는std::set
컨테이너의 또 다른 유용한 멤버 함수입니다. 집합에 그러한 요소가 없으면 과거의 반복자가 반환됩니다. 이것은 사용자가 성공적인 함수 호출을 확인하는 데 도움이됩니다.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s1 = {1, 1, 1, 2, 2, 3};
auto search = s1.find(2);
if (search != s1.end()) {
cout << "Found " << (*search) << endl;
} else {
cout << "Not found" << endl;
}
return EXIT_SUCCESS;
}
출력:
Found 2
contains
멤버 함수를 사용하여 주어진 키를 가진 요소가 C++의 집합에 존재하는지 확인
C++ 20 언어 표준부터std::set
는 지정된 키를 가진 요소가 세트 객체에 존재하는지 확인하는 더 간단한 인터페이스 인 멤버 함수contains
를 제공합니다. 이 함수는 부울 값을 반환하여 그러한 요소가 세트에 있는지 여부를 나타냅니다. 이 함수의 실행 시간 복잡도는 컨테이너 크기에서 로그입니다.
#include <iostream>
#include <set>
using std::cout;
using std::endl;
using std::multiset;
using std::set;
int main() {
std::set<int> s3 = {91, 123, 63, 122, 22, 53};
for (int x : {22, 23, 53, 54}) {
if (s3.contains(x)) {
cout << x << ": Found\n";
} else {
cout << x << ": Not found\n";
}
}
return EXIT_SUCCESS;
}
출력:
22: Found
23: Not found
53: Found
54: Not found
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook