답변
, 당신의 벡터가 정렬되어있는 경우 예를 들어,
std::vector<int> v;
// Finds the first element in the vector that has the value 42:
// If there is no such value, it == v.end()
std::vector<int>::const_iterator it = std::find(v.begin(), v.end(), 42);
, 당신은 값이 벡터의 존재 여부를 테스트하는 std::binary_search()
를 사용할 수 반복자 범위에서 선형 검색을 수행 std::find()
알고리즘이있다 반복자를 그 값을 가진 벡터의 요소 범위로 가져 오려면 std::equal_range()
을 사용해야합니다.
'std :: find'를 자유로운 함수로 가지는 이점은 메모리 배열,'std :: vector', 또는 선형 적으로 횡단 될 수있는 다른 컨테이너에서 작동한다는 것입니다. – Thanatos
"멀티 스레드"할 수 있습니다. –
당신은 일정한 요소 개선만을 볼 것입니다. 게다가'std :: find'가하는 것의 범위를 벗어납니다. (대부분의 상황에서는 멀티 스레드 검색이 필요하지 않습니다.) 그러나 매우 유사하게 작동하는'parallel_find() '를 작성할 수 있으며, 약간의 (꽤 느슨한) 요구 사항을 만족시키는 모든 컨테이너에서 작동합니다. – Thanatos
std::find(vec.begin(), vec.end(), value)
을 사용하십시오.
그리고 당신에게 그 말<algorithm>
을 포함하는 것을 잊지 마세요? C++에서 vector
에 대한 "find"알고리즘이 있습니다. 역설적으로 동시에, std::find
이라고합니다. 또는 std::binary_search
일 수도 있습니다. 또는 벡터에 저장된 데이터의 속성에 따라 다른 것입니다.
컨테이너는 알고리즘의 효과적인 구현이 어떻게 든 컨테이너의 내부 세부 사항에 묶일 때만 고유 알고리즘의 특정 버전을 가져옵니다 (컨테이너 메소드로 구현 됨). std::list<>::sort
이 하나의 예입니다.
다른 모든 경우에 알고리즘은 독립 실행 형 기능으로 구현됩니다.
vector::find
이없는 이유는 std::find
(std::find
은 O(N)
이며 일반적으로 벡터에 대해 더 잘할 수 없음)보다 알고리즘상의 이점이 없기 때문입니다.
map::find
을 가지고있는 이유는 (
map::find
는
O(log N)
은 그래서 당신은 항상지도에 대한
std::find
이상 사용할 것입니다).
벡터가 정렬되어 있으면 O (N)보다 확실히 잘 수행 할 수 있습니다. – moodboom
대체 방법은 무엇입니까?
표준은 유사 요소 등의 임의의 시퀀스를 순차 검색 할 때 std :: find를 제공합니다.
반복자를 지원하는 모든 컨테이너에 적용 할 수 있지만 내부 정렬 된 컨테이너의 경우 (예 : std::map
) 검색을 최적화 할 수 있습니다. 이 경우 컨테이너는 자신의 find
멤버 함수를 제공합니다.
왜 C++에서 벡터를 찾을 수 없습니까?
구현이 std::find(vector.begin(), vector.end(), value_to_find);
과 동일하므로 std::vector<???>::find
을 생성 할 필요가 없습니다.
직접 작성해야합니까?
특정 제한 사항이나 요구 사항이 없으면 가능한 한 STL 구현을 사용해야합니다.
컨테이너 클래스에서 '찾기'기능이 'SRP'(Single Responsibility Principle)을 위반합니다. 컨테이너의 핵심 기능은 컨테이너의 요소 검색, 저장을위한 인터페이스를 제공하는 것입니다. 'Finding', 'Sorting', 'Iterating'등은 컨테이너의 핵심 기능이 아니므로 직접 인터페이스가 아닙니다.
'Herb'는 Namespace Principle으로되어 있지만 'find'는 'vector'즉 'std'와 동일한 네임 스페이스에 정의 됨으로써 인터페이스의 일부입니다.
그러나 컨테이너가 자신의'find '함수를 제공하는 것이 전적으로 적합합니다. 일반적인'std :: find' 알고리즘 ('std :: map :: find'를 고려하십시오)보다 성능이 좋은 함수를 제공 할 수 있습니다. –
- 1. WebResources를 찾을 수없는 이유
- 2. Zend Framework에서 컨트롤러 플러그인을 찾을 수없는 이유
- 3. C에서 벡터를 생성하는 방법 #
- 4. c에서 벡터를 복제하는 방법은 무엇입니까?
- 5. 알 수없는 충돌 이유
- 6. persist 후에 분리 한 경우 엔터티를 찾을 수없는 이유
- 7. BufferedGraphics가 C에서 드로잉이 느린 이유 #
- 8. MySQL 오류, 알 수없는 이유
- 9. Python에서 코드를 실행하는 알 수없는 이유
- 10. C에서 nullable 형식을 항상 사용하면 안되는 이유
- 11. 요소의 ID를 얻을 수없는 이유 - Jquery
- 12. ASP.NET MVC 3에서 HtmlDecode를 사용할 수없는 이유
- 13. this.type을 새 인스턴스에 사용할 수없는 이유
- 14. 포틀릿 API에서 서블릿 요청을 사용할 수없는 이유
- 15. UITextView/UITextField가 iOS에서 UITextInput을 구현할 수없는 이유
- 16. 최상위 모듈을 힌트로 메인으로 설정할 수없는 이유
- 17. BackboneJS에서 컬렉션에 모델을 추가 할 수없는 이유
- 18. 내 AVD에서 400X800 해상도를 얻을 수없는 이유
- 19. Qt에서 일반 C++ 클래스를 사용할 수없는 이유
- 20. ExecutorService.shutdownNow 메서드가 스레드를 중지 할 수없는 이유
- 21. 정규식 기본값을 찾을 수없는 경우
- 22. Flex 문서에서 찾을 수없는 스타일
- 23. Regex에서 찾을 수없는 오류가 발생했습니다
- 24. getInputStream을 찾을 수없는 이유는 무엇입니까?
- 25. System.ServiceModel.WebHttpBinding을 찾을 수없는 이유는 무엇입니까?
- 26. PHP 객체가 방법을 찾을 수없는
- 27. C에서 IronRuby를 사용하는 "알 수없는 메서드"
- 28. C++ 11에서 (동일한 유형의) 람다 벡터를 만들 수없는 이유는 무엇입니까?
- 29. 이 오류가 찾을 수없는 이유 {http://www.alfresco.org/model/system/1.0}base.Read & 의미는 무엇입니까?
- 30. gdb를 사용하여 C에서 알 수없는 함수를 찾으십시오.
아마도 "찾기"가 의도 한 것을 정의해야합니까? – KevenK
'std :: find'가 있습니다. http://stackoverflow.com/questions/571394/how-to-find-an-item-in-a-stdvector/571405#571405 – meagar
을 참조하십시오. STL의 아름다움은 컨테이너 및 알고리즘의 __ 디커플링에 있습니다 __. 그것들을 이터레이터와 함께. 이것은 내가 지금까지 보아 왔던 모든 OO 라이브러리보다 _ 더 큰 추상화로 이어지는 _ 의도 된 디자인 결정입니다. 좀 더 엄격한 OO 배경 (Java, C#)에서 나온다면, 처음 엔 이상하게 보일 수 있지만 _ 학습의 가치가있는 것은 분명합니다. – sbi