从您的散文描述中,我没有得到任何信息表明这些集合实际上会形成任何图表。
如果您只想将元素与集合相关联,我建议
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 似乎下降了。稍后会添加