C++设置了一个用于排序的比较器和另一个用于唯一性的比较器

C++ set with a comparator for sort and another for uniqueness

本文关键字:比较器 用于 排序 唯一性 另一个 一个 设置 C++      更新时间:2023-10-16

Edge 是一个包含 3 个字段的类:权重、from_vertex to_vertex。我想创建一个包含图形中所有唯一边缘的集合。(如果交换from_vertex和to_vertex - 并且权重相等 - 则它仍然是相同的边缘。另外,我希望这组按边缘的权重排序。这可以通过集合实现实现来实现吗,或者有更好的方法吗?

当然,这是可能的。但这只是因为您实际上不需要两个比较器。

基本思想是在元组<weight, min_vertex, max_vertex>上按词法排序,其中min_vertexto_vertexfrom_vertex中较小的一个,max_vertex是较大的。当然,具有相同权重的两个相对边将具有相同的元组,并且没有相同权重的两个相对边将是不同的。该集合总体上将按权重排序,因为这是元组中最重要的元素。

不会让你得到的一件事是,如果你知道from,to但不知道重量,就能够搜索优势。同样,它不会使特定from,to对的所有边都连续(当然,这与按权重排序不兼容(。如果你想要这种东西,你可能需要维护多个结构。