2017-11-20 4 views
1

아래와 같이 buttonValues라는 C++ 맵이 있습니다.두 번째 요소가 X 일 때 C++ Map은 첫 번째 요소를 얻습니다.

map<int, int> buttonValues; 

아래와 같이 데이터를지도에 넣습니다. 내가 원하는 무엇

buttonValues.insert(std::pair<int, int>(0, 1)); 
buttonValues.insert(std::pair<int, int>(1, 3)); 
buttonValues.insert(std::pair<int, int>(2, 0)); 

는 두 번째 열에서 0 값을 검색하고 0이 두 번째 열에서 발견되는 경우, 첫 번째 열에서 값을 반환합니다. 내가 처음에 해당하는 값을 얻는 방법,

buttonValues.find(0)->second 

을 그러나이 예에서, 내가 반환하고자하는 값은 2. 지금까지 내가 이것으로 두 번째 열에 0을 검색 할 수 있습니다 생각입니다 기둥?

감사 캘럼

+1

{{1,0}, {2,0}, {3,0}}'에서 '0'을 검색 할 때 알고리즘이 어떻게 동작해야합니까? '-1'을 검색 할 때? –

+0

아무것도 찾을 수 없습니다. 이 코드가 일단 해결되면 if 문으로 넘어갈 것이므로 if 문은 단순히 전달됩니다. –

답변

1

buttonValues.find(0)->second 당신에게 값 0을 키에 대응하는 ("2 열")을 제공 할 것입니다. 귀하의 예에서는 1을 반환합니다. 당신은 기능이 넣을 수

for (const auto& keyval : buttonValues) // Look at each key-value pair 
{ 
    if (keyval.second == 0) // If the value is 0... 
    { 
     return keyval.first; // ...return the first element in the pair 
    } 
} 

: 당신은지도 반복과 가치 = 0을 찾아 다음 키를 반환해야합니다. 지도에는 고유 키가 있지만 반드시 고유 값은 필요하지 않습니다. 따라서 값이 0 인 여러 개의 키가있는 경우를 처리해야합니다. 이 같은

+0

훌륭한 작품입니다. 감사! –

1

뭔가 :

for (auto X : map_name) 
    if (X.second == 0) 
    return X.first; 

std::pair<>이지도에 제 1 및 제 2 열 값을 보유하고 있습니다. 모든 쌍을 반복하고 원하는 값에 대한 두 번째 값을 확인할 수 있습니다.

0

실제로 성능의 관점에서지도에서 값을 기준으로 키를 검색하지 않는 경우 시간 복잡도는 선형 시간 O(N)이됩니다. 지도에서 키로 값을 검색하면 'O (logN)'가됩니다. 역방향지도 또는 multimap을 작성하거나 심지어 unordered_map/unordered_multimap을 작성하는 것을 고려해 볼 수 있습니다.