2013-10-04 32 views
-11

考慮下面的代碼:在unordered_map中查找枚舉並獲取其值?

enum Keys { 
    Up, 
    Down, 
    Left, 
    Right 
}; 

enum KeyState { 
    Down, 
    Up 
}; 

std::unordered_map<Keys, KeyState> keys; 

keys[Keys::Up] = KeyState::Up; 
keys[Keys::Down] = KeyState::Up; 
keys[Keys::Left] = KeyState::Down; 
keys[Keys::Right] = KeyState::Up; 

我怎麼能寫這樣的方法:

isKeyDown(Keys key) { 
    return true if key has the Up or Down state. 
} 
+0

(並學習至少C++的基礎知識。) – 2013-10-04 20:16:52

+0

@ H2CO3嗯,問題不是完全的損失:我發現'std :: hash '可能有一個專門化,其中'E'是默認的任何'enum'!整齊。 – Yakk

回答

4
KeyState value = keys[key]; 
return value == KeyState::Up || value == KeyState::Down; 

當然,這些都是您爲KeyState定義的只有兩個值,所以,因爲它...

return true; 
+0

如果該值不存在會怎麼樣? – vinnylinux

+0

@vinnylinux:他預先填寫了所有可能的(有效)鍵的地圖。此外,這裏真的是重要的一點,處理所有可能的錯誤情況?我真的需要考慮'isKeyDown((KeyState)INT_MAX);'在示例代碼中? –