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입니다 : 여기에 코드입니다. 대신이 구조체에 대한 포인터를 사용할 수 있지만이 솔루션은 만족스럽지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 모든 제안을 주시면 감사하겠습니다. ;)
_move-constructor_을 제공하거나 _swap 멤버 function_을 정의하고 'MyNode (graph) .swap (nodes [n])'과 같은 작업을 수행하는 것은 어떻습니까 –
좋은 생각이 들지만, 노드에 이동 생성자를 추가합니다. 또한 복사 생성자를 추가해야합니다./Lemon은 맵 초기화에 비좁은 constuctor를 사용합니다. 그래서 나는 아직도 레몬 맵을 레몬 맵에 삽입하는 방법을 모른다. – remdezx
'MyNode'에서 래퍼를 사용하면 어떨까요? 해당 래퍼는 스마트 포인터 또는'reference_wrapper '입니다. – Gonmator