解题思路:
注意事项:
//修改方法2
// 比较函数
bool compare(int a, int b)
{
return a > b; // 这里定义按从大到小的顺序排序
}
set<int, bool(*)(int, int)> v(compare); // 使用函数指针作为比较函数
//修改方法3
set<int, decltype([](int a, int b) { return a > b; })> v([](int a, int b) { return a > b; });
// 使用 Lambda 表达式作为比较函数
参考代码:
#include <iostream>
#include <cmath>
#include <set>
#include<vector>
using namespace std;
struct com
{
bool operator()(const pair<int, int>& a, const pair<int, int>& b) const
{
if (a.first != b.first)
{
return a.first > b.first;
}
return a.second > b.second;
}
};
int main()
{
int n = 0;
while (cin >> n && n != 0)
{
// 定义存储 pair<int, int> 的 set
set<pair<int, int>,com> v;
vector<int>v2 ;
int a = 0;
for (int i = 0; i < n; i++)
{
cin >> a;
// 将 abs(a) 和 i 封装成 pair 后插入 set
v.insert(make_pair(abs(a), i));
v2.push_back(a) ;
}
bool first = true;
for (auto it : v)
{
if (!first)
{
cout << " ";
}
int j = it.second ;
cout << v2[j];
first = false;
}
cout << endl;
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复