Używam HashSet i Dictionary w języku C# do implementacji struktury Graph. Mam problem z wyjątkowością elementów hashset, gdy klucz hashset jest niestandardową klasą. Tutaj mam:C# - definiowanie hashset z niestandardowym kluczem
public class Point
{
public int x { get; set; }
public int y { get; set; }
}
public class Vertex
{
public Vertex(Point point)
{
VertexLabel = point;
}
public Point VertexLabel { get; private set; }
}
public class Edge
{
public Edge(Vertex to, Vertex from, double weight)
{
FromVertex = from;
ToVertex = to;
Weight = weight;
}
public Vertex FromVertex { get; private set; }
public Vertex ToVertex { get; private set; }
public double Weight { get; private set; }
}
public class Graph
{
public Graph()
{
_Vertexes = new HashSet<Vertex>();
_VertexEdgeMapping = new Dictionary<Vertex, LinkedList<Edge>>();
}
private HashSet<Vertex> _Vertexes;
private Dictionary<Vertex, LinkedList<Edge>> _VertexEdgeMapping;
}
Problemem jest to, że kiedy mam same wierzchołki i chcę, aby dodać je do wykresu, dostają duplikowane. jak mogę zdefiniować sposób, w jaki HashSet zrozumie wyjątkowość moich vertexów?
Z definicji hasz będzie zawsze taki sam, jeśli ta sama wartość zostanie przekazana jako dane wejściowe. Jeśli masz dwa wierzchołki o dokładnie takiej samej wartości, będą one miały dokładnie taki sam skrót. Czy na pewno chcesz użyć HashSet? EDYCJA: W drugim czytaniu brzmi to tak, jak chcesz uniknąć powielania wierzchołków, które są takie same. Jeśli tak, jeśli mają te same punkty początkowe i końcowe, może istnieć inna zmienna, która jest inna. Czy próbowałeś użyć czegoś podobnego do Tuple zamówionych par reprezentujących punkty początkowe i końcowe Vertex? – IllusiveBrian
@Namfuak To nie jest poprawne. Utwórz dwa obiekty Vertex o tej samej wartości punktowej i porównaj GetHashCode. – Paparazzi