2017-04-13 1 views
0

나는 최대 값을 충족시키고 싶은 맵이있다. 내가 원하는 무엇 : 1. key 경우 나는삼중 항 연산자의 도움으로 최대 값으로 맵을 수행하는 방법

내가 강한 인상을 아래에 기록 된 모든 것이 하나 개의 라인에서 할 수있는 것을 mymap[key] 값을 다시하고 싶지 않은 존재 또는 다음 value > mymap[key] 그렇지 않으면 mymap[key] = value 2.하지 않습니다 삼중 연산자의 도움으로

if (mymap.find(key) != mymap.end()) 
    { 
     mymap[key] = value; 
    } 
    else 
    { 
     if (value > mymap[key]) mymap[key] = value; 
    } 

내가 할 줄 떨어지게 같은

mymap[key] = value > mymap[key] ? value : mymap[key]; 

하지만 경우 key이 존재하지 않는 경우 mymap[key] = 0이 생성되고 value은 음수 일 수 있습니다.

아이디어가 있으십니까? 미리 도움을 주셔서 감사합니다.

+0

기존 코드를 사용하면 어떨까요? 읽기 쉬운 코드 몇 줄을 사용하면 문제가 있습니까? – NathanOliver

+0

@ NathanOliver 케이스에 대해보다 간단하고 읽기 쉬운 솔루션이 있기 때문에 'value'는 양수입니다. – tkrishtop

+0

당신의 예제는'key'에 대해 최대 3 번의 검색을 수행 할 수 있습니다. –

답변

1

의견에서 언급했듯이지도를 여러 번 키를 검색합니다. 일반적으로 나중에 찾기 위해 결과를 저장하는 것이 좋습니다. 그래서 매번 키에 대한지도를 조사하지 않습니다.

어때요?

const auto it = mymap.find(key); 
if (it != mymap.end()) 
{ 
    it->second = std::max(value, it->second); 
} 
else 
{ 
    mymap.emplace(key, value); 
} 
+0

그래, 고마워, 확실히 나아 졌어 – tkrishtop

+0

@tkrishtop 아무 문제 없어, 기꺼이 도와 드리겠습니다. 이 답변으로 문제가 해결되면 답변을 수락하십시오. – RyanP

관련 문제