簡體   English   中英

c ++用於雙向隨機訪問的高效數據結構

[英]c++ efficient data structure for bidirectional random access

我有兩組A和B的元素a和b。現在這些元素彼此相關(0..1:n基數),所以每個a在B中最多只有一個伙伴,每個b可以有幾個(至少一個)與A中項目的關聯.A是一組整數對,B是整數。

有沒有有效的方法存儲這樣的“雙向”地圖? 一種簡單的方法是使用兩張地圖:

map<pair<unsigned int, unsigned int>, unsigned int> AtoB
map<unsigned int, vector<pair<unsigned int, unsigned int> > > BtoA

但也許有更好的方法可以更有效地處理這個問題。

謝謝你的幫助

Boost包含兩個處理這個的庫: Boost.BimapBoost.MultiIndex 前者是特定於雙向(“雙向”)映射的問題,而第二種是更通用的,並且實現類似於具有任意索引的內存數據庫的東西。

鑒於你的unsigned int鍵沒有唯一映射到你的對,我認為MultiIndex更有條理。 自從我上次使用這個庫以來已經有很長一段時間了,但是看一下教程,你需要這樣的東西

struct YourData {
     unsigned key;
     std::pair<unsigned, unsigned> value;
};

typedef multi_index_container<
    YourData,
    indexed_by<
        ordered_non_unique<member<YourData, unsigned, &YourData::key> >,
        ordered_unique<member<YourData, std::pair<unsigned, unsigned>,
                              &YourData::value> >
    >
> YourContainer;

如果您不想使用Boost,那么您至少可以通過替換來簡化當前設置

map<unsigned int, vector<pair<unsigned int, unsigned int> > >

通過std::multimap<unsigned, std::pair<unsigned, unsigned>>

boost::bimap怎么樣? http://www.boost.org/doc/libs/1_47_0/libs/bimap/doc/html/index.html我認為這是給你的。

Map和Multimap的效率為O(log n),因此,我認為這是存儲數據的最佳方式。 我建議用

map<pair<unsigned int, unsigned int>, unsigned int> AtoB
multimap<pair<unsigned int, unsigned int>, unsigned int> BtoA

暫無
暫無

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

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