[英]What's the best way to search from several map<key,value>?
我創建了一個包含多個map<>
的vector
。
vector<map<key,value>*> v;
v.push_back(&map1);
// ...
v.push_back(&map2);
// ...
v.push_back(&map3);
在任何時候,如果必須檢索一個value
,我會遍歷vector
並在每個map
元素(即v[0]
、 v[1]
等)中找到key
,直到找到它。 這是最好的方法嗎? 我願意接受任何建議。 這只是我給出的一個想法,我還沒有實現這種方式(如果有任何錯誤,請指出)。
編輯:在map
中找到元素並不重要。 在多個模塊中,准備了不同的map
。 隨着代碼的進行,它們會被一一添加。 每當搜索任何key
時,應在所有map
組合中搜索到該時間的結果。
如果沒有更多關於目的和用途的信息,可能有點難以回答。 例如,是否需要有多個 map 對象? 如果沒有,那么您可以將所有項目存儲在單個 map 中並完全消除向量。 這將更有效地進行查找。 如果映射中存在重復條目,則每個值的鍵可以包括區分信息,該信息當前定義將值放入哪個 map。
如果您需要知道在哪個子圖中找到了密鑰,請嘗試:
unordered_set<key, pair<mapid, value>>
這對於搜索具有更好的復雜性。
如果鍵不重疊,即在所有地圖中都是唯一的,那么我建議使用自定義比較函子的set
或unordered_set
,因為這將有助於查找。 或者甚至使用新地圖擴展第一個 map,如果分析顯示足夠快/更快。
如果鍵不是唯一的,則 go 使用multiset
或unordered_multiset
,再次使用自定義比較函子。
您還可以手動對vector
進行排序並使用binary_search
進行搜索。 無論如何,我建議使用樹來存儲所有地圖。
這取決於您的地圖是如何“獨立創建”的,但如果可以選擇,我只會制作一個全局 map(或多地圖)object 並將其傳遞給您的所有創建者。 如果您在整個地方都有很多小地圖,您只需在全局地圖上調用insert
將您的地圖合並到其中。
這樣,您只有一個 object 可以在其中執行查找,這是相當有效的(對於多映射為 O(log n),對於 unordered_multimap,預期為 O(1))。
這也使您不必將原始指針傳遞給周圍的容器並進行清理!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.