使用 std::sort 对集进行排序
Sorting Sets using std::sort
我想知道我们是否可以对预先创建的集合进行排序。当我第一次创建集合s_p2时,我使用不同的元素 point.getLength() 进行排序。但是在用户输入后,我想根据 x 值 point.getX() 对项目进行排序。我怎么做?
似乎设置容器没有排序功能。我建议使用矢量。但是集合只能存储独特的元素。
Q1:如何根据条件对集合进行排序
Q2:如果 set 无法执行此操作,那么哪个 STL 容器是最佳选择,我该如何对容器中的元素进行排序。
你不能
求助于set
,它如何排序是特定set
类型的一部分。 给定的set
具有无法更改的固定设置顺序。
您可以相对轻松地使用相同的数据创建新set
。 只需创建一个基于新条件进行排序的新set
即可。
如果要在同一代码中使用两个set
,则必须抽象对基础set
的访问。
现在,如果您正在进行罕见的读取和修改,使用手动排序的vector
通常是一个更好的主意。 您可以使用 std::unique
- erase
习语删除重复项。
>std::set
以排序方式存储其成员。如果你从.begin()
到.end()
遍历集合,你将得到一个排序的项目列表。
如果您不喜欢默认排序条件,则可以提供第二个模板参数来std::set<>
您可以拥有两组并使它们保持同步或将一组复制到另一组。
#include <iostream>
#include <set>
using namespace std;
struct AB
{
AB(int a,int b) : _a(a),_b(b) {}
int _a;
int _b;
};
struct byA
{
bool operator () (const AB& lhs, const AB& rhs)
{
return lhs._a <= rhs._a;
}
};
struct byB
{
bool operator () (const AB& lhs, const AB& rhs)
{
return lhs._b <= rhs._b;
}
};
typedef set<AB,byA> ByA;
typedef set<AB,byB> ByB;
typedef ByA::const_iterator ByAIt;
typedef ByB::const_iterator ByBIt;
void getByB(const ByA &sA,ByB &sB)
{
for(ByAIt iter=sA.begin(); iter!=sA.end();++iter) {
const AB &ab=*iter;
sB.insert(ab);
}
}
int main(int argc, const char **argv)
{
ByA sA;
sA.insert(AB(3,6));
sA.insert(AB(1,8));
sA.insert(AB(2,7));
ByB sB;
getByB(sA,sB);
cout << "ByA:" << endl;
for(ByAIt iter=sA.begin(); iter!=sA.end();++iter) {
const AB &ab=*iter;
cout << ab._a << "," << ab._b << " ";
}
cout << endl << endl;
cout << "ByB:" << endl;
for(ByBIt iter=sB.begin(); iter!=sB.end();++iter) {
const AB &ab=*iter;
cout << ab._a << "," << ab._b << " ";
}
cout << endl;
return 0;
}
程序返回:比亚1,8 2,7 3,6
旁路:3,6 2,7 1,8
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- std::sort()函数无法对向量的一部分进行排序
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 使用 std::sort 对向量进行稳定排序
- std::排序在共享指针的向量上
- 如何根据排序索引的向量对 std::index 集进行排序?
- 如何按键对 std::对列表进行排序?
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 为什么我的函数接受"std::string"进行排序不会改变它?
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- 使用 std::sort 对二维 c 数组进行排序
- std::tuple 可以根据其值在编译时/运行时排序吗?
- 如何排序 std::p空气优先
- 仅当条件适用时才排序 - std::sort
- 排序 std::set 使用 operator() 对插入进行排序
- C++ - 排序 std::vector 中元素的索引
- 合并排序 std:string 中的字符
- 部分排序 std::list