2013-06-05 1 views
1

나는 Lemon Graph Library을 사용하고 있으며, 복사하거나 asigning하지 않고 항목을 레몬 맵에 추가하고 싶습니다.복사하지 않고 레몬 그래프 라이브러리 맵에 요소를 삽입하십시오.

#include <iostream> 
#include <lemon/list_graph.h> 
#include <lemon/maps.h> 

using namespace lemon; 
using namespace std; 

typedef lemon::ListDigraph    LGraph; 
typedef lemon::ListDigraph::Arc  LArc; 
typedef lemon::ListDigraph::Node  LNode; 

class MyNode { 
public: 
    CrossRefMap<LGraph, LArc, std::string> inputs; 

    MyNode(const LGraph& graph) : inputs(graph) { } 
}; 


int main(){ 
    LGraph graph; 
    LGraph::NodeMap<MyNode> nodes(graph); 

    LNode n = graph.addNode(); 
    nodes[n] = MyNode(graph); // error: object of type 'MyNode' cannot be assigned because its copy assignment operator is implicitly deleted 

    return 0; 
} 

여기서 가장 큰 문제는 생성자에서 초기화를 필요로하고있다 더 복사 consturctor 또는 할당 연산자가없는 CrossRefMap입니다 : 여기에 코드입니다. 대신이 구조체에 대한 포인터를 사용할 수 있지만이 솔루션은 만족스럽지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 모든 제안을 주시면 감사하겠습니다. ;)

+1

_move-constructor_을 제공하거나 _swap 멤버 function_을 정의하고 'MyNode (graph) .swap (nodes [n])'과 같은 작업을 수행하는 것은 어떻습니까 –

+0

좋은 생각이 들지만, 노드에 이동 생성자를 추가합니다. 또한 복사 생성자를 추가해야합니다./Lemon은 맵 초기화에 비좁은 constuctor를 사용합니다. 그래서 나는 아직도 레몬 맵을 레몬 맵에 삽입하는 방법을 모른다. – remdezx

+0

'MyNode'에서 래퍼를 사용하면 어떨까요? 해당 래퍼는 스마트 포인터 또는'reference_wrapper '입니다. – Gonmator

답변

1

내가 알기 엔 표준 lemon 맵을 사용할 가능성이 없으므로 std::map을 기반으로 구현했습니다. 그래프의 변경 사항을 추적하고 레몬 그래프 옵저버를 사용하여지도를 업데이트 할 수 있습니다.

관련 문제