從你的散文描述,我沒有得到任何信息,該集合實際上會形成任何圖形。
如果你想要做的是聯營元素與一組,我建議
std::map<ElementId, SetId>
(其中ElementId
可能僅僅是Element*
如果你知道指針保持有效)。
如果你也希望能夠查詢逆有效
bimap<Element, bimaps::multiset_of<SetId> >
將是一個候選人。看到一個示範
住在Coliru
¹
#include <boost/range/iterator_range.hpp>
#include <boost/bimap/multiset_of.hpp>
#include <boost/bimap.hpp>
#include <iostream>
using namespace boost;
int main() {
using Element = int; // for simplicity :)
using SetId = int;
using Sets = bimap<Element, bimaps::multiset_of<SetId> >;
Sets sets;
sets.insert({ Element(1), 300 });
sets.insert({ Element(2), 300 });
sets.insert({ Element(3), 400 });
sets.insert({ Element(4), 300 });
// give us set #300
for (auto& e : make_iterator_range(sets.right.equal_range(300)))
std::cout << e.first << " - Element(" << e.second << ")\n";
}
打印
300 - Element(1)
300 - Element(2)
300 - Element(4)
¹Coliru似乎下來。稍後再添加
在看了(新的disjoint_set_ *類)之後,我不認爲他們提供了迭代集合的成員。它們的作用就像從元素到集合代表的單向映射。如果它可以幫助你:http://paste.ubuntu.com/8881626/ – sehe 2014-11-08 10:21:45