說我有兩種類型的ID,entityID
和linkID
。關聯兩個獨立密鑰
這些用於引用不同類型的對象,並且ID本身具有不同(不可轉換)類型*。每個ID在其類型中都是唯一的。
每個Entity
對應於存儲在別處的Link
。因此,我希望能夠訪問另一個基於另一個。要做到這一點,我希望能夠從一個ID類型轉換到另一個。
我通常會將兩種不同類型關聯起來,例如std::map<id, value>
。但是,這限制了搜索到key
,因此只允許單向轉換。
我可以做的是創建一個std::set<std::pair<entityID, linkID>>
。這確保了當通過std::pair::first
進行搜索時,從entityID
到linkID
的快速轉換,以及通過std::pair::second
使用std::find_if
進行搜索時具有合理的時間。
同樣,這似乎並不是一個乾淨的解決方案,對於任何閱讀代碼的人都不明顯。雖然,據我瞭解,這是不可能有一個容器按兩個鍵排序,我想知道是否有一個更方便的方式來存儲這種關係。
*如果它的事項,該類型的ID是unsigned short
和struct{unsigned int, unsigned short}
。
編輯 在評論中提到通過sharth的boost::bimap就是我一直在尋找。
['boost :: bimap'](http://www.boost.org/doc/libs/1_55_0/libs/bimap/doc/html/index.html)是一個很好的解決方案。 –
@sharth的確如此,我正在尋找。不過,我的詞彙無法產生合適的谷歌搜索。 ;) – nwn