2016-04-15 135 views
1

所以我搜索了一遍,發現我們可以使用多重映射將一組等效鍵映射到不同的值。我想知道如何做相反的事情?那是將不同的鍵映射到相同的值?有沒有一個stl的數據結構?在C++中將不同的鍵映射到相同的值

+0

'map'不要求這些值是唯一的。只是鑰匙。 – cHao

+1

只是反轉地圖,所以值是關鍵,反之亦然 –

回答

0

您可以有一個std::map,使多個鍵映射到相同的值。沒有什麼反對的。但是,您可能要查找的是能夠查找映射到給定值的所有鍵,而無需遍歷整個地圖。我不認爲有這樣的數據結構。

+0

@Sahu Yea其實我創建了一張如下圖:std :: map > ,std :: string> m。問題是,當我給這個映射m存在的pair對時,它沒有打印任何值。這裏有什麼可能是錯的?我想也許是因爲有重複的值,而地圖只允許一對一的對應關係。這就是我發佈這個的原因。任何幫助將感恩。 – slin6174

+0

@ dl23lin,在這種情況下,你應該刪除這個問題,並詢問你試過的代碼,你期望看到的是什麼,以及實際看到的是什麼。這比這個問題更有用。 –

3

正常的std::map(或std::unordered_map)可以做到這一點。您對如何做幾個選擇是:

  • 普通key-value存儲,在那裏你複製值需要
  • 普通key-value存儲,但其中的值是一個指向實際數據可以共享,可選擇使用std::shared_ptr
  • 使用某種類型的結構(一std::tuple也許)領取鑰匙(儘管它可能更多的麻煩處理這比它的價值,沒有什麼我真的建議)
  • 使用Boost multi-index containers

藉助Boost,您可以使用現成的解決方案,並且如果您已經在項目中使用了Boost(它是一套很好的庫,並且很好地補充了標準庫),我認爲選擇它是不容易的該解決方案。

相關問題