я использую Библиотека графов лимонов и я хочу добавить элемент на лимонную карту, не копируя его и не назначая. Вот код:
#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;
}
Основной проблемой здесь является CrossRefMap, который нуждается в инициализации в конструкторе и не имеет константора копирования или оператора присваивания. Я мог бы вместо этого использовать указатель на эту структуру, но это решение меня не удовлетворяет. Как я могу решить эту проблему? Любые предложения будут оценены. 😉
Насколько я знаю нет возможности сделать это со стандартным lemon
карты, поэтому я реализовал свой собственный на основе std::map
, Я могу отслеживать изменения на графике и обновлять свою карту с помощью наблюдателей на графике лимона.
Других решений пока нет …