簡體   English   中英

從幾個 map 中搜索的最佳方法是什么<key,value> ?</key,value>

[英]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>>

這對於搜索具有更好的復雜性。

如果鍵不重疊,即在所有地圖中都是唯一的,那么我建議使用自定義比較函子的setunordered_set ,因為這將有助於查找。 或者甚至使用新地圖擴展第一個 map,如果分析顯示足夠快/更快。

如果鍵不是唯一的,則 go 使用multisetunordered_multiset ,再次使用自定義比較函子。

您還可以手動對vector進行排序並使用binary_search進行搜索。 無論如何,我建議使用樹來存儲所有地圖。

這取決於您的地圖是如何“獨立創建”的,但如果可以選擇,我只會制作一個全局 map(或多地圖)object 並將其傳遞給您的所有創建者。 如果您在整個地方都有很多小地圖,您只需在全局地圖上調用insert將您的地圖合並到其中。

這樣,您只有一個 object 可以在其中執行查找,這是相當有效的(對於多映射為 O(log n),對於 unordered_multimap,預期為 O(1))。

這也使您不必將原始指針傳遞給周圍的容器並進行清理!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM