我創建查找在地圖中的元素的HandleManager
,其目的是簡單地映射Handle
秒(這是一個long long int
typedef
)至string
秒。目的是爲了使使用Handle
的物體也可以通過string
識別,如果它幫助用戶記住物體。在這種情況下,在該地圖中:通過其值
typedef std::unordered_map<Handle, std::string> HandleMap;
這兩種類型都是鑰匙,只要它們可以用來識別任何東西。到目前爲止,除了需要獲得Handle
的代碼之外,所有內容都已編譯完成。目的是使得當用戶分配一個string
像這樣:
handle("myHandle");
Handle
一個隨機產生,然後通過string
在前述的圖配對它。我現在想要的是能夠獲取與基於該string
的string
傳遞配對的Handle
:
Handle HandleManager::id(const std::string &name)
{
HandleMap::iterator it = pHandles.find(name);
if (it != pHandles.end())
return it->first;
return -1;
}
但由於某些奇怪的原因,編譯器會抱怨這樣的:
HandleManager.cpp:48:45: error: no matching function for call to ‘std::unordered_map<long long int, std::basic_string<char> >::find(const string&)’
在上述地圖中,string
是值,Handle
是關鍵。那麼如何根據其中包含的值從unordered_map
獲得密鑰?
也許你需要[boost :: bimap](http://www.boost.org/doc/libs/1_59_0/libs/bimap/doc/html/index.html) – Jepessen
唉,你必須寫這樣的功能你自己。 – SingerOfTheFall
你不能使用'std :: unordered_map',唯一的方法是遍歷所有條目。 IIRC增強提供了一種類型,允許按值查找。 –