Tôi đang sử dụng HashSet và Dictionary trong C# để triển khai cấu trúc Graph. Tôi gặp vấn đề với tính duy nhất của các phần tử băm khi khóa băm là một lớp được tùy chỉnh. Ở đây tôi có:C# - xác định hashset với khóa tùy chỉnh
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;
}
Vấn đề là khi tôi có cùng một đỉnh và tôi muốn thêm chúng vào biểu đồ, chúng sẽ được nhân đôi. làm thế nào tôi có thể xác định một cách mà các HashSet sẽ hiểu được sự độc đáo của các đỉnh của tôi?
Theo định nghĩa, giá trị băm sẽ luôn giống nhau nếu cùng một giá trị được truyền dưới dạng đầu vào. Nếu bạn có hai đỉnh với chính xác cùng một giá trị, chúng sẽ có cùng một giá trị băm. Bạn có chắc chắn muốn sử dụng HashSet không? EDIT: Khi đọc lần hai, có vẻ như bạn muốn tránh các đỉnh trùng lặp giống nhau. Nếu vậy, nếu chúng có cùng điểm bắt đầu và điểm kết thúc, thì có thể có một số biến khác khác. Bạn đã thử sử dụng một cái gì đó giống như một Tuple của các cặp đặt hàng đại diện cho điểm bắt đầu và kết thúc của Vertex? – IllusiveBrian
@Namfuak Điều đó không đúng. Vui lòng tạo hai đối tượng Vertex có cùng giá trị điểm và so sánh GetHashCode. Ví dụ: – Paparazzi