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_vertexto_vertexfrom_vertex 中的较小者,而 max_vertex 是更棒的。当然,两个具有相同权重的相对边将具有相同的元组,并且没有 相同权重的两个相对边 将是不同的。该集合将整体按权重排序,因为这是元组中最重要的元素。

如果您知道 from,to 但不知道权重,则此 不会 给您的一件事是搜索边缘的能力。同样,它不会使特定 from,to 对的所有边都连续(当然,这与按重量排序不兼容)。如果你想要那种东西,你可能需要维护多个结构。