English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set equal_range()이 함수는 컨테이너에서 val과 일치하는 모든 요소를 포함하는 범위의 경계를 반환합니다. set 컨테이너에는 중복된 값이 없기 때문에 이 범위는 최대 하나의 요소를 포함할 수 있습니다.
val이 컨테이너의 어떤 값도 일치하지 않으면, 반환된 범위는 0이 되며 두 이터레이터는 가장 가까운 val보다 큰 값을 가리키며, 그렇지 않으면 val이 컨테이너의 모든 요소보다 크다면 end를 가리킵니다.
pair<const_iterator,const_iterator> equal_range(const value_type& val) const; pair<iterator,iterator> equal_range(const value_type& val);
이 범위는 두 이터레이터로 정의되며, 하나는 val이 미만이 아닌 첫 번째 요소를 가리키고, 다른 하나는 val이 초과하는 첫 번째 요소를 가리킵니다.
val:집합 컨테이너에서 검색할 값을
이 함수는 pair를 반환합니다. pair::first는 범위의 하한에 위치하며 lower_bound(val)이 반환할 값과 같은 값을 가지며, pair::second는 upper_bound(val)이 반환할 값과 같은 값을 가지며, 이는 범위의 상한에 위치합니다.
대수적 크기입니다.
변경 없음
컨테이너에 접근됩니다(상수 및 비상수 버전 모두 컨테이너를 변경할 수 없습니다).
집합의 요소에 동시에 접근하는 것은 안전합니다.
예외가 발생하면 컨테이너에 어떤 변경도 없습니다.
간단한 예제를 보겠습니다:
#include <iostream> #include <set> using namespace std; int main(void) { set<char> m = {'a','b','c','d'}; auto ret = m.equal_range('b'); cout << b의 최소값은: << *ret.first << endl; cout << b의 최댓값은: << *ret.second << endl; return 0; }
출력:
b의 최소값은: b b의 최댓값은: c
위의 예제에서 b의 최소값은 b, b의 최댓값은 c입니다.
간단한 예제를 보겠습니다:
#include <iostream> #include <set> using namespace std; int main() { // 컨테이너 초기화 set<int> mp; // 임의의 순서로 요소를 삽입합니다 mp.insert( 4 ); mp.insert( 1 ); mp.insert( 6 ); pair<set<int>::const_iterator,set<int>::const_iterator> ret; ret = mp.equal_range(10); cout << 최소값은: << *ret.first; cout << 최댓값은: << *ret.second; return 0; }
출력:
하한은 3 상한은 3
위의 예제에서 equal_range() 함수는 end()로 반환됩니다.3، 그것은 set mp에 존재하지 않는10。
간단한 예제를 보겠습니다:
#include <set> #include <iostream> int main( { using namespace std; typedef set<int, less<int> > IntSet; IntSet s1; set<int, less<int> > :: const_iterator s1_RcIter; s1.insert( 10 ); s1.insert( 20 ); s1.insert( 30 ); pair<IntSet::const_iterator, IntSet::const_iterator> p1, p2; p1 = s1.equal_range( 20 ); cout << "집합s1중간 키는20의 요소의 상한은: " << *(p1.second) << "." << endl; cout << "집합s1중간 키는20의 요소의 하한은: " << *(p1.first << "." << endl; //directly call upper_bound s1_RcIter = s1.upper_bound( 20 ); cout << "directly call upper_bound(20)에서 << *s1_RcIter << "," << endl << "pair의 두 번째 요소와 일치하는 << " equal_range(20)을 반환합니다." << endl; p2 = s1.equal_range( 40 ); //키를 찾지 못하면 //pair의 두 요소 모두 end()을 반환합니다 if ( ( ( p2.first == s1.end() ) ) && ( ( p2.second == s1.end() ) ) cout << "집합s1키가 0보다 작은 것이 없습니다40의 요소." << endl; else cout << "집합s1의 키 >= 40의 요소는: " << *(p1.first << "." << endl; return 0; }
출력:
집합 s1중간 키는20의 요소의 상한은: 30. 집합 s1중간 키는20의 요소의 하한은: 20. upper_bound(20)에서 30, equal_range(20)을 반환합니다. 집합 s1키가 0보다 작은 것이 없습니다40의 요소.
간단한 예제를 보겠습니다:
#include <iostream> #include <set> using namespace std; int main () { std::set<int> myset; for (int i=1; i<=5; i++myset.insert(i*10); // myset: 10 20 30 40 50 pair<std::set<int>::const_iterator,set<int>::const_iterator> ret; ret = myset.equal_range(30); cout << "하한 지점: " << *ret.first << '\n'; cout << "상한 지점: " << *ret.second << '\n'; return 0; }
출력:
하한 지점: 30 상한 지점: 40