는 동안 키가 존재하지 않는 경우에만지도를 삽입 할 수있는 효율적인 방법을 찾고, 나는 this approach 건너 온 : std::map
잘 작동삽입하기 전에 lower_bound를 사용하여지도를 검색 할 때의 이점. ptr_map과 동일합니까?
MapType::iterator lb = mymap.lower_bound(k);
if(lb != mymap.end() && !(mymap.key_comp()(k, lb->first))) {
// key exists. Value accessible from lb->second
} else {
// Do insert. Use lb as a hint to insert so it can avoid another lookup
mymap.insert(lb, MapType::value_type(k, v));
}
. 그러나, boost::ptr_map
은 유사한 형태, 즉 반복자 위치를 허용하는 형태를 제공하지 않는다.
그래서 궁금하네요 :
그 접근 방식의 장점은 똑바로 앞으로 삽입을하고 어떻게 비교이야? 즉
std::pair<MapType::iterator, bool> ret; ret = mymap.insert(MapType::value_type(k, v)); if (!ret.second) { // key exists. insertion not done. do something else }
lower_bound
방법을 사용하는 좋은 이유가 실제로 있다면, 그것은boost::ptr_map
에 상응하는 전략이있다? 아니면 적용되지 않겠습니까?
흥미롭게도, 내가 물어보기 4 분 전에이 질문에 처음 대답 한 것으로 나를 보여주고 있습니다. – CashCow
많은 감사. 첫 번째 제안은 제가 예제에서 인용 한 접근 방식을 찾을 때까지 실제로 사용했던 것입니다. 두 접근법을 비교하려고 시도했을 때,'ptr_map'으로 풀리지 않았습니다. 내 원래의 질문은별로 잘 쓰여지지 않았고 오해의 소지가 조금있었습니다. 지금 업데이트되었습니다. 죄송합니다. –
"가장 효율적"이라는 단어는 논쟁의 여지가 있습니다. 이는 유스 케이스에 달려 있습니다. 삽입 할 객체를 생성하는 것은 매우 많은 비용이 소요될 수 있으므로, 먼저 'lower_bound'가 작동 할 수있는 곳을 먼저 확인해야합니다. –