find() 알고리즘이지도에서 작동하지 않고 map :: find 대신 사용해야하는 이유가 있습니까?지도에서 왜 STL 알고리즘 찾기()가 작동하지 않습니까?
답변
- 이지도 작업을 수행하지만, (
std::pair<const map::key_type, map::mapped_type>
인)을map::value_type
와 비교하지 키 입력이 필요합니다. - map.find는 키를 가져와 키/값 쌍 반복자를 반환하기 때문에.
다른 곳에서 언급했듯이 유형은 키/값 쌍이므로 비교를 수행하기 위해 함수/함수를 제공해야합니다. (사용자 정의 연산자 ==() 오버로드도 할 수 있습니다. 그런 일은 한번도 시도한 적이 없습니다.)
지도 멤버 함수 find()를 사용하고 싶지는 않을 것입니다. O (logN) 룩업, 알고리듬 std :: find()는 O (N)이다.
추가 :지도를 사용하여 std :: equal_range/lower_bound/upper_bound()를 사용할 수도 있다고 생각합니다.이 또한 O (LogN)입니다.
사용자 지정 연산자 ==는 허용되거나 필요하지 않습니다. find_if innstead를 사용하십시오. – MSalters
당신 말이 맞아요. –
동일 범위를 의미합니까? 맵을 사용하면 lower_bound, upper_bound 및 equal_range 멤버 함수를 사용해야합니다. 표준 등가물은 로그의 비교 수를 제공 할 수 있지만 컨테이너의 요소를 걷는 데 선형 시간이 필요합니다.
선형 보행에 대한 확신이 있습니까? 랜덤 억세스 이터레이터가 있다면 로그 워크를 얻으실 수 있다고 생각했습니다. –
임의 액세스 반복기가있는 경우 그렇습니다. 그렇지 않은 경우 선형 단계 수를 수행해야합니다. std :: map은 무작위 액세스 반복자를 제공하지 않습니다. – navigator
네, 그 지점에서 꽤 옳습니다.지도의 반복자는 양방향입니다. –
이러한 주제에 대한 자세한 내용은 Scott Meyers의 "Effective STL"을 읽어야합니다.
: 멤버 함수가 존재하는 이유를 들어
왜 당신이 그것을 사용해야합니다 "항목 (43)는 같은 이름을 가진 알고리즘 멤버 함수를 선호".
Scott Meyers는 자신 만의 루프를 작성하는 것과는 대조적으로 STL 알고리즘을 사용하는 것을 권장합니다 (2001 년 판 43 항). 단순한 유형의 경우에는 그냥 사용할 수 있어야합니다.
find(mmap.begin(), mmap.end(), "value")
- 1. STL 알고리즘 및 const_iterators
- 2. 왜 document.evaluate가 작동하지 않습니까?
- 3. 국경은 왜 작동하지 않습니까?
- 4. 왜 drawPath가 작동하지 않습니까?
- 5. FilterExpression이 작동하지 않습니까? 왜?
- 6. jQuery.fn - 왜 작동하지 않습니까?
- 7. 왜 -isMemberOfClass가 작동하지 않습니까?
- 8. 왜 asp.net에서 작동하지 않습니까?
- 9. Navigationcontroller - 왜 작동하지 않습니까?
- 10. 왜 작동하지 않습니까?
- 11. 왜 Zend_Route가 작동하지 않습니까?
- 12. 왜 | 찾기로 작동하지 않습니까?
- 13. 왜 document.onload에서 작동하지 않습니까?
- 14. 추가와 병합을위한 STL 알고리즘
- 15. 왜 jQuery 선택기가 작동하지 않습니까?
- 16. 왜 외부 IP가 작동하지 않습니까?
- 17. Mercurial - 왜 diff가 작동하지 않습니까?
- 18. 자바 제네릭이 왜 작동하지 않습니까?
- 19. 왜 데이터 바인딩이 작동하지 않습니까?
- 20. 이 캐스트가 왜 작동하지 않습니까?
- 21. 왜 $ .ajax (..)가 작동하지 않습니까?
- 22. 왜 내 업데이트가 작동하지 않습니까?
- 23. 왜 + = 목록과 함께 작동하지 않습니까?
- 24. jquery else, 왜 작동하지 않습니까?
- 25. 왜 keylistener가 여기에서 작동하지 않습니까?
- 26. PHP - 왜 preg_replace가 작동하지 않습니까?
- 27. CSS 플로트가 작동하지 않습니까? 왜?
- 28. 왜 ajax 요청이 작동하지 않습니까?
- 29. 왜 파이썬 산점도가 작동하지 않습니까?
- 30. 왜 아이들 기능이 작동하지 않습니까?
지도의'value_type_은'pair'입니다. –
표준 섹션 23.3.1에 따르면 std :: map에 대해 key_type은 Key이지만 value_type은 pair 입니다. 그 이유는 일단 값이 삽입되면 삽입 키는 변경 불가능해야하며, 그렇지 않으면 순서 불변성이 깨질 수 있습니다. –