equal_range 예제

equal_range 예제

equal_range, 즉 범위 오브젝트의 결과는 두 개의 이터레이터 쌍입니다[범위 시작, 범위 끝). 따라서 [range.first, range.second] 이상반복하려고 합니다: equal_range는 범위[i1, i2) 내의 모든 요소가 동일한 키를 갖도록 반복기 i1, i2 쌍을 반환합니다. 따라서 코드 718을 사용하여 모든 도시를 반복하기 위해 equal_range를 호출한 다음 반환된 쌍의 첫 번째 에서 반환된 쌍의 두 번째 도시를 반복합니다. equal_range는 모든 요소가 val과 동일한 한 쌍의 이터레이터 형태로 범위를 반환합니다. val과 같은 값이 발견되지 않으면 빈 범위가 반환되므로 result.first == result.second입니다. equal_range의 조건자가 아닌 버전의 경우 요소의 같음은 operator<에 의해 결정됩니다. equal_range의 술어 버전의 경우 요소의 같음은 pred에 의해 결정됩니다. 이 코드를 가지고 있으며 equal_range 메서드가 이터레이터를 반환하는 부분을 이해할 수 없습니다. 범위는 내부에 두 개의 멀티 맵 개체와 쌍 개체를 알고 있지만, 내가 얻을 수없는 것은 `에 대한 (it = range.first; 그것은 != range.second; ++it)`이 있는 이유입니다 – 이것은 정확히 무엇을 의미합니까? 다중 맵::equal_range()는 쌍의 거동이 많은 G를 반환하는 C++ STL의 기본 제공 함수입니다. 쌍은 k와 동일한 키가 있는 컨테이너의 모든 요소를 포함하는 범위의 경계를 나타냅니다. 키 K와 일치하지 않는 경우 반환되는 범위는 컨테이너의 내부 비교 개체(key_comp)에 따라 k 를 따라 이동하는 것으로 간주되는 키가 있는 첫 번째 요소를 가리키는 두 이터레이터가 모두 길이 0입니다. std::equal_range는 지정된 값과 동일한 모든 요소가 있는 지정된 범위[첫 번째, 마지막) 내에서 하위 범위를 찾는 데 사용됩니다. 이러한 하위 범위의 초기 및 최종 바인딩을 반환합니다.

. 반환된 범위는 두 개의 이터레이터로 정의되며, 하나는 값보다 적은 첫 번째 요소를 가리키고 다른 하나는 값보다 큰 첫 번째 요소를 가리킵니다. 첫 번째 이터레이터는 std::lower_bound() 및 두 번째 -std::upper_bound()를 사용 하 고 대체로 얻을 수 있습니다. [첫 번째, 마지막] 범위는 값과 관련하여 적어도 부분적으로 정렬되어야 하며, 즉 다음 요구 사항을 모두 충족해야 합니다. . 임의 액세스 범위의 경우 복잡성은 O(log N)이며, 그렇지 않으면 복잡성은 O(N)입니다. 즉, 해당 범위를 반복하려면 range.first에서 시작하여 range.second에 도달할 때까지 반복기를 진행하므로 동일한 범위를 벗어났습니다. 개념적으로 는 범위 [container.begin(), container.end())를 반복할 때 일어나는 것과 동일합니다.

첫 번째와 마지막 사이의 거리에서 로그 학 (최대 2 * log2 (마지막 – 첫 번째) + O (1) 비교.) 완전히 정렬된 범위는 이러한 기준을 충족하며, 호출에서 std::p 이르는 범위도 마찬가지입니다.