Сопоставить экземпляры одного класса с экземплярами другого, используя unordered_map - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть простой код, в котором определены четыре переменные Node -типа и две Edge -типа, и создана неупорядоченная карта для сопоставления начальных ребер с их конечными ребрами. Однако Visual Studio 2015 Professional жалуется на следующую проблему:

The C++ Standard doesn't provide a hash for this type.

Не могли бы вы помочь мне, как решить эту проблему? Мой маленький код (который является MWE, поэтому первоначальная цель была отлична от введения такой глупой карты):

#include<string>
#include<vector>
#include<unordered_map>
#include<iostream>

using namespace std;

class Node
{
   public:
      Node(){};
      string label;
};

class Edge
{
   public:
      Edge(){};
      Node *start, *end;
};

int main()
{
   Edge* edge;
   Node* node;

   vector<Node*> nodes;
   vector<Edge*> edges;

   unordered_map<Node*,Edge*> n2e; 

   edge = new Edge();
   edges.push_back(edge);

   node = new Node();
   node->label = "A";
   edge->start = node;
   nodes.push_back(node);

   node = new Node();
   node->label = "B";
   edge->end = node;
   nodes.push_back(node);

   edge = new Edge();
   edges.push_back(edge);

   node = new Node();
   node->label = "C";
   edge->start = node;
   nodes.push_back(node);

   node = new Node();
   node->label = "D";
   edge->end = node;
   nodes.push_back(node);

   n2e[nodes[0]] = edges[0];
   n2e[nodes[2]] = edges[1];

   cout << n2e[nodes[0]]->start->label << "  " << n2e[nodes[0]]->end->label << endl;
   cout << n2e[nodes[2]]->start->label << "  " << n2e[nodes[2]]->end->label << endl;

   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...