簡體   English   中英

在std :: map中使用2個鍵

[英]Use 2 keys in std::map

我試圖用2個鍵創建一個std::map 我可以使用std::pair來完成它,或者創建一個結構並將其用作鍵。

在我的軟件中,有很多搜索功能。 該功能通過第一或第二鍵進行搜索。

如果我在地圖上有大約1000個項目,我想如果要搜索它會花費一些時間。 所以我認為,如果我制作另一個保存第二個鍵的std::map ,並且值是1st鍵,那么我可以取該值並在另一個圖中搜索以獲得真實值。

但是我的猜測是,這將占用更多的內存。 在這種情況下最好的選擇是什么?

蠻力法

您可以將項目存儲在std::vector並具有兩個映射:第一個具有第一個鍵和指向矢量項的指針(或索引),第二個具有第二個鍵和指向矢量項的指針(或索引)。 問題是修改集時要維護所有三個容器。

指針與索引:指針在注釋中正確指出是危險的,但是如果要從向量中刪除項目,則指針更簡單。 否則索引會更安全。

聰明的方法

您可以使用專門為您的情況設計的Boost.MultiIndex容器。

這是您必須解決的工程決策。

如果您知道key1和key2鍵集沖突,則多個映射才有意義(IMHO)。 否則,為什么不只將兩個鍵插入同一映射,每個對應的值都引用您的對象?

您不想復制對象,因此可以將它們放入向量中,並將向量索引作為映射值。 或使用鍵到指針的映射等。

1k項實際上並不多,因此這里我不關心內存的使用,但是可能要考慮使用映射而不是unordered_map(rb樹與哈希表)。

另外,如果您從地圖上刪除項目,則需要同時刪除兩個鍵,因此請務必考慮到這一點。

暫無
暫無

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

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