使用std :: sort排序集

M.A*_*M.A 11 c++ stl set

我想知道我们是否可以对预先创建的集进行排序.当我第一次创建set s_p2时,我使用不同的元素point.getLength()进行排序.但是在用户输入之后我想根据x值point.getX()对项目进行排序.我怎么做的?

似乎set container没有sort函数.我建议使用矢量.但是集合只能存储唯一的元素.

Q1:我如何根据标准对集合进行排序

Q2:如果set无法做到这一点,那么STL容器是最佳选择,如何对容器中的元素进行排序.

Yak*_*ont 13

你不能诉诸a set,它如何分类是特定类型的一部分set.给定set具有无法更改的固定集合顺序.

您可以set相对轻松地创建具有相同数据的新内容.只需set根据新标准创建一个新的排序.

如果要set在同一代码中使用这两个s,则必须抽象对底层的访问set.

现在,如果您正在进行罕见的读取和修改,使用vector您手动排序的通常是一个更好的主意.您可以使用std::unique- erase成语删除重复项.

  • 注意上面的代码@Mike写道将使用`operator ==`来比较它们.你可能需要传入一个谓词,这样你就只能找出等同于`(!(a <b)&&!(b <a))的东西. (3认同)
  • @ user1571494:给定一个排序向量,`v.erase(std :: unique(v.begin(),v.end()),v.end());`将删除重复项. (2认同)

Rob*_*obᵩ 7

std::set以有序的方式存储其成员.如果你穿过从集合.begin().end(),你将有项目的排序列表.

如果您不喜欢默认排序条件,则可以提供第二个模板参数 std::set<>