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

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

C++ STL Set(집합)

C ++ set lower_bound()함수는 매개변수에 전달된 val과 동일한 키를 가리키는 이터너리를 반환하는 함수입니다.

설정 컨테이너에 val이 없으면, val보다 큰 다음 요소를 가리키는 이터너리를 반환합니다.

문법

iterator lower_bound (const value_type& val);                        //C++ 11 이전
iterator lower_bound (const value_type& val);                        //C++ 11시작
const_iterator lower_bound (const value_type& val) const;      //C++ 11시작

매개변수

val: 설정 컨테이너에서 검색할 값.

반환 값

그것은 설정 컨테이너에서 값을 가리키는 이터너리를 반환합니다. 이 이터너리는 매개변수에 전달된 val과 동일합니다. 해당 요소가 없으면 end()를 반환합니다.

복잡

크기는 대수적입니다.

이터너리 유효성

변경이 없습니다.

데이터 분쟁

컨테이너는 접근됩니다(상수와 비상수 버전 모두 컨테이너를 변경할 수 없습니다).

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

예외 안전성

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

예제1

나는 주어진 키의 하한을 얻는 간단한 예제를 보여드리겠습니다:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<char> m = {'a','b','c','d','e'};
          
   auto it = m.lower_bound('c');
   cout << "하한 (=) " << *it;
   return 0;
}

출력:

하한 (=) c

위의 예제에서 c의 하한은 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 contains:";
  for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    cout << ' ' << *it;
  cout << '\n';
  return 0;
}

출력:

myset contains: 10 20 70 80 90

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

예제3

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

#include <set>  
#include <iostream>  
using namespace std;
  
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.lower_bound( 20);  
   cout << "집합 s1의 키는20의 요소는: "  
        << *s1_RcIter << "." << endl;  
  
   s1_RcIter = s1.lower_bound( 40);  
  
   // 일치하는 키가 없으면 end()을 반환
   if ( s1_RcIter == s1.end());  
      cout << "집합 s1키 값이 없는 요소가 있습니다:40의 요소.\n" << endl;  
   else  
      cout << "집합은 s1하고 키는40의 요소는: "  
           << *s1_RcIter << "." << endl;  
  
     //집합에서 특정 위치의 요소를 찾을 수 있습니다
    //해제된迭代기로 위치를 찾아서 
   s1_AcIter = s1.end());  
   s1_AcIter--;  
   s1_RcIter = s1.lower_bound( *s1_AcIter);  
   cout << "s1의 요소와 마지막 요소의 키가 일치하는 요소는:"  
        << *s1_RcIter << "." << endl;  
        
        return 0;
}

출력:

집합 s1의 키는20의 요소는: 20.
집합 s1키 값이 없는 요소가 있습니다:40의 요소.
s1의 요소와 마지막 요소의 키가 일치하는 요소는:30.

예제4

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

#include<set>
#include<iostream>
using namespace std;
 
int main()
{
 
    set<int> mp; 
    // 무작위 순서로 요소를 삽입
    mp.insert( 2 );
    mp.insert( 1 );
    mp.insert( 5 );
    mp.insert( 4 );
    
    cout << "요소는: \n";
    for (auto it = mp.begin(); it != mp.end(); it++) {
        cout << (*it << endl;
    }
 
    //때2존재하면
    auto it = mp.lower_bound(2);
    cout << "키2의 하한은 ";
    cout << (*it << endl;
 
     //존재하지 않으면3때
     //지시3의 다음 큰
    it = mp.lower_bound(3);
    cout << "키3의 하한은 ";
    cout << (*it << endl;
 
    // 초과하면6
    it = mp.lower_bound(6);
    cout << "키6의 하한은 ";
    cout << (*it);
    
    return 0;
}

출력:

요소는: 
1
2
4
5
키2의 하한은 2
키3의 하한은 4
키6의 하한은 4

위의 예제에서, 우리가 컨테이너의 값을 초과하는 경우나 다른 말로 하면 set 컨테이너에 해당 값을 가지고 있지 않을 때, 그는 end로 돌아옵니다.

C++ STL Set(집합)