English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ set upper_bound() 사용법 및 예제

C++ STL Set(집합)

C ++ set upper_bound()함수는 매개변수에 전달된 val보다 큰 set 컨테이너의 값에 대한 이터레이터를 반환하는 함수입니다.

문법

      iterator upper_bound (const value_type& val) const;            //C++ 11 이전
      iterator upper_bound (const value_type& val);                    //C++ 11 이후
const_iterator upper_bound (const value_type& val) const;        //C++ 11 이후

매개변수

val:집합 컨테이너에서 검색할 값을

반환 값

그는 매개변수에 전달된 val보다 큰 set 컨테이너의 값에 대한 이터레이터를 반환합니다. 그러나 이러한 요소가 없다면 end()을 반환합니다.

복잡

크기는 대수적입니다.

이터레이터 유효성

변경이 없습니다.

데이터 갈등

컨테이너가 접근된다(상수와 상수가 아닌 버전 모두 컨테이너를 변경할 수 없습니다).

집합의 요소에 동시에 접근하는 것은 안전합니다.

예외

예외가 발생하면, 컨테이너에 어떤 변경도 없습니다.

예제1

나는 주어진 값을 상한으로 가져오는 간단한 예제를 보여주겠습니다:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<char> m = {'a', 'b', 'c', 'd'};
           
   auto it = m.upper_bound('b');
   cout << "b의 상한은 (>): " << *it << endl;
   return 0;
}

출력:

b의 상한은 (>): c

위의 예제에서, 요소 b의 상한을 찾으려고 시도할 때, 그는 요소 b의 큰 값을 반환합니다. 즉, c

예제2

나는 간단한 예제를 보여주겠습니다. set의 요소를 하한에서 상한까지 지우기:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator itlow,itup;
  for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
  itlow=myset.lower_bound(30);                //       ^
  itup=myset.upper_bound(60);                 //                   ^
  myset.erase(itlow,itup);                     // 10 20 70 80 90
  std::cout << "myset이 포함합니다:";
  for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    cout << ' ' << *it;
  cout << '\n';
  return 0;
}

출력:

myset은 포함합니다: 10 20 70 80 90

위의 예제에서 erase() 함수는 set의 요소를 하한(=)에서 상한(>)까지 제거하고 나머지를 출력합니다.

예제3

간단한 예제를 보겠습니다:

#include<iostream>
#include<set>
using namespace std;
 
int main()
{
    // 컨테이너 초기화
    set<int> mp;
 
    // 랜덤 순서로 요소를 삽입합니다
    mp.insert( 12 );
    mp.insert( 11 );
    mp.insert( 15 );
    mp.insert( 14 );
 
    // 그때11존재하면
    auto it = mp.upper_bound(11);
    cout << "키11최댓값은 ";
    cout << (*it << endl;
 
    // 그때13존재하지 않으면
    it = mp.upper_bound(13);
    cout << "키13최댓값은 ";
    cout << (*it << endl;
 
    // 그때17최대 키 값을 초과하면, 크기순으로
    // mp의 반환 값은 키로, 값은 0입니다.
    it = mp.upper_bound(17);
    cout << "키17최댓값은 ";
    cout << (*it);
    return 0;
}

출력:

키11최댓값은 12
키13최댓값은 14
키17최댓값은 4

위의 예제에서, 집합 컨테이너에 존재하지 않지만 최대 값보다 작은 값을 탐색할 때, 더 큰 값을 반환합니다. 즉, 탐색하려는 값의 최댓값은13최댓값에 도달하면, 반환됩니다14집합에서 존재하지 않고 컨테이너의 최대 값을 초과하는 값을 탐색할 때, end()로 돌아갑니다.

예제4

간단한 예제를 보겠습니다:

#include <set>  
#include <iostream>  
  
int main(  
{  
   using namespace std;     
   set<int> s1;  
   set<int> :: const_iterator s1_AcIter, s1_RcIter;  
  
   s1.insert( 10 );  
   s1.insert( 20 );  
   s1.insert( 30 );  
  
   s1_RcIter = s1.upper_bound( 20 );  
   cout << "집합 s1의 키가20의 첫 번째 요소는: " << *s1_RcIter << "." << endl;  
  
   s1_RcIter = s1.upper_bound( 30 );  
  
   // 일치하는 키를 찾지 못하면 end()을 반환합니다  
   if ( s1_RcIter == s1.end()  
      cout << "집합 s1키가 요소보다 큰 키가 없습니다 30. << endl;  
   else  
      cout << "키> 40의 집합 s1요소는: "  
           << *s1_RcIter << "." << endl;  
  
    //집합에서 특정 위치의 요소를 찾을 수 있습니다
    //사용하여 디테리어리제이션된 이터레이터로 주소를 찾습니다
   s1_AcIter = s1.begin( );  
   s1_RcIter = s1.upper_bound( *s1_AcIter );  
   cout << "s1의 첫 번째 요소의 키가 "  
        << endl << "s1의 초기 요소는: "  
        << *s1_RcIter << "." << endl;  
        
        return 0;
}

출력:

집합 s1의 키가20의 첫 번째 요소는: 30.
집합 s1키가 요소보다 큰 키가 없습니다 30.
s1의 첫 번째 요소의 키가
s1의 초기 요소는: 20.

C++ STL Set(집합)