C++ 设置了一个用于排序的比较器和另一个用于唯一性的比较器
C++ set with a comparator for sort and another for uniqueness
Edge 是一个 class,具有 3 个字段:权重、from_vertex、to_vertex。我想创建一个包含图中所有唯一边的集合。 (如果 from_vertex 和 to_vertex 被交换 - 并且权重相等 - ,它仍然是相同的边。)另外,我希望这个集合按边的权重排序。这可以通过集合实现实现还是有更好的方法?
当然,这是可能的。但只是因为您实际上不需要两个比较器。
基本思想是对元组 <weight, min_vertex, max_vertex>
进行词法排序,其中 min_vertex
是 to_vertex
或 from_vertex
中的较小者,而 max_vertex
是更棒的。当然,两个具有相同权重的相对边将具有相同的元组,并且没有 相同权重的两个相对边 将是不同的。该集合将整体按权重排序,因为这是元组中最重要的元素。
如果您知道 from,to
但不知道权重,则此 不会 给您的一件事是搜索边缘的能力。同样,它不会使特定 from,to
对的所有边都连续(当然,这与按重量排序不兼容)。如果你想要那种东西,你可能需要维护多个结构。
Edge 是一个 class,具有 3 个字段:权重、from_vertex、to_vertex。我想创建一个包含图中所有唯一边的集合。 (如果 from_vertex 和 to_vertex 被交换 - 并且权重相等 - ,它仍然是相同的边。)另外,我希望这个集合按边的权重排序。这可以通过集合实现实现还是有更好的方法?
当然,这是可能的。但只是因为您实际上不需要两个比较器。
基本思想是对元组 <weight, min_vertex, max_vertex>
进行词法排序,其中 min_vertex
是 to_vertex
或 from_vertex
中的较小者,而 max_vertex
是更棒的。当然,两个具有相同权重的相对边将具有相同的元组,并且没有 相同权重的两个相对边 将是不同的。该集合将整体按权重排序,因为这是元组中最重要的元素。
如果您知道 from,to
但不知道权重,则此 不会 给您的一件事是搜索边缘的能力。同样,它不会使特定 from,to
对的所有边都连续(当然,这与按重量排序不兼容)。如果你想要那种东西,你可能需要维护多个结构。