C++ 표준 라이브러리는 lower_bound 및 upper_bound라는 토토 사이트 추천리즘 함수를 제공합니다그리고 set 및 multiset과 같은 일부 컨테이너 클래스에도 동일한 이름을 가진 멤버 함수가 있습니다이들 모두 ``정렬된 범위에서 이진 검색을 수행하여 지정된 조건을 만족하는 반복자를 구하는'' 역할을 하며 거의 동일한 방식으로 사용할 수 있습니다
동일한 방식으로 사용될 수 있더라도 컨테이너 클래스에 동일한 이름의 멤버 함수가 있는 경우 컨테이너 요소에 토토 사이트 추천리즘을 적용할 때 단순히 멤버 함수를 사용하는 것이 좋습니다
이유를 설명하기 전에 아래 샘플 코드를 Visual Studio 2022의 C++ 컴파일러로 컴파일하고 실행한 결과를 보여드리겠습니다
하나는 std::set의 멤버 함수인 토토 사이트 추천를 호출하고 다른 하나는 std::토토 사이트 추천를 호출합니다
#포함 <토토 사이트 추천리즘>
#포함 <크로노>
#포함 <iostream>
#포함 <세트>템플릿 <유형 이름 T>공허 테스트(const 문자* 메시지, T func){자동시작 =표준::chrono::system_clock::now();자동끝 =표준::chrono::system_clock::now();표준::쿠우트<< 메시지 <<표준::chrono::duration_cast<표준::chrono::milliseconds>(end - start)count() <<표준::endl;
}int 메인(){표준::설정<int>s;const int데이터크기 =1024 * 1024 * 30;for (inti =0; 나는 < 데이터 크기; ++나는)const int번호 =123;"std::set::토토 사이트 추천 경과 시간(밀리초):", [&]()표준::설정<int>::const_iterator it = s토토 사이트 추천(num);"std::토토 사이트 추천 경과 시간(밀리초):", [&]()표준::설정<int>::const_iterator =표준::토토 사이트 추천(sbegin(), send(), num);
결과는 이렇습니다
std::set::토토 사이트 추천 경과 시간(ms): 0std::토토 사이트 추천 경과 시간(ms): 573
실행 환경에 따라 다소 차이가 있을 수 있다고 생각하는데, 주목할 만한 점은 동일한 작업을 수행하는 것처럼 보이더라도 std::set::토토 사이트 추천는 순식간에 끝나는 반면, std::토토 사이트 추천는 조금 더 오래 걸린다는 점입니다
이 차이의 이유는 std::set::lower_bound가 std::set의 멤버 함수이므로 자체 데이터 구조(std::set)를 토토 사이트 추천 있기 때문입니다std::set은 일반적으로 이진 트리로 구성되므로 이진 트리를 추적하여 이진 검색을 효율적으로 수행합니다
std::토토 사이트 추천도 이진 검색을 수행하므로 언뜻 보면 성능이 비슷할 것이라고 생각할 수 있지만 std::토토 사이트 추천는 반복자를 인수로 전달하는 것만으로는 데이터 구조를 파악할 수 없습니다
std::토토 사이트 추천가 이진 검색을 수행하려면 전달된 두 반복자의 범위를 나누고 좁혀야 합니다즉, 범위의 시작 반복자의 이름이 먼저 지정되고 범위의 종료 반복자의 이름이 마지막에 지정되면 분할할 반복자의 위치를 찾으십시오
자동 중간 = (마지막 - 첫 번째) / 2;
(위 코드는 의사 코드입니다 실제 작동하는 코드는 아닙니다)그러나 이는 벡터 및 데크와 같이 무작위로 액세스 가능한 반복자를 통해서만 가능합니다
std::set은 임의로 접근할 수 없으므로, (마지막 - 첫 번째) / 2 위치에 도달할 때까지 연산자++가 반복적으로 호출됩니다이것은 비효율적인 프로세스입니다
동일한 이진 검색에도 성능에 차이가 있는 이유는 바로 이 때문입니다이와 같이 동일한 이름, 동일한 토토 사이트 추천리즘을 사용하더라도 성능에 차이가 있을 수 있습니다
토토 사이트 추천리즘과 동일한 이름을 가진 함수가 컨테이너 클래스의 멤버 함수로 정의된 경우 어떤 이유로 토토 사이트 추천리즘 함수보다 해당 멤버 함수가 더 적합하다고 판단되었습니다그러므로 멤버함수를 사용하는 것이 좋습니다

