산문 설명을 통해 세트가 실제로 그래프를 형성한다는 정보를 얻지 못했습니다. 당신이 원하는 모든 세트와 연관 요소 인 경우
, 나는 좋을 것
std::map<ElementId, SetId>
(당신이 포인터가 유효 체류 알고 있다면 어디 ElementId
단순히 Element*
될 수있다).
당신이 효율적으로
bimap<Element, bimaps::multiset_of<SetId> >
이 후보가 될 것입니다 역을 조회 할 수있게하려면
. Coliru에
라이브 데모를 참조하십시오 Coliru 아래로 보인다 300 - Element(1)
300 - Element(2)
300 - Element(4)
가 ¹
#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";
}
인쇄
을 ¹. 나중에 추가 할 것입니다
(나를 위해 새로운) disjoint_set_ * 클래스를보고 난 후에, 그들은 반복 멤버를 제공 할 여유가 없다고 생각합니다. 그것들은 요소에서 대표 요소로의 단방향 매핑과 같은 역할을합니다. 도움이되는 경우 : http://paste.ubuntu.com/8881626/ – sehe