class Edge;
class Node
{
public:
Node(): distance(numeric_limits<double>::infinity()), visited(false) {}
Node(string a_id): distance(numeric_limits<double>::infinity()), visited(false), id(a_id) {}
bool operator==(const Node& p) {return p.id == id; }
string id;
double distance;
bool visited;
string previous;
vector<Edge*> edges;
};
class Edge
{
public:
Edge(double weight, string id)
{
this->weight = weight;
dest = new Node(id);
}
double weight;
Node * dest;
};
class Comparator {
public:
bool operator()(const Node* a, const Node* b)
{
return (a->distance > b->distance);
}
};
Это мои занятия. Я создал приоритетную очередь из вектора указателей узлов:Приоритет Очередь указателей C++
priority_queue<Node*, vector<Node*>, Comparator > queue;
Но после некоторых операций я получаю ошибку сегментации.
queue.push(nodes[0]);
queue.pop();
queue.push(nodes[1]);
queue.push(nodes[4]);
queue.pop();
queue.push(nodes[3]);
queue.push(nodes[5]);
queue.pop();
queue.push(nodes[6]);
queue.push(nodes[7]);
nodes[6]->distance=1;
queue.pop();
В последней строке
queue.pop();
Я получаю ошибку сегментации, и я не понимаю, почему это происходит. Заранее спасибо.
Вы не должны мутировать содержимое очереди приоритетов. Специально не что-либо, что связано с определением относительного приоритета между элементами. Другими словами, не делайте этого: 'nodes [6] -> distance = 1;' – juanchopanza
Ошибка сегментации - это обычно повреждение памяти, и это может случиться далеко от точки, где вы получаете ошибку. Ваш код может быть неправильным в другом месте. –
Кто очищает Node.edges? – JimR