c++ - 在 C++ 中使用 key 对 hashmap 进行排序。无法排序
问题描述
#include<bits/stdc++.h>
using namespace std;
int main()
{
int flag=0;
int T,i;
cin>>T;
while(T--)
{
unordered_map<int,int>h;
long int n;
cin>>n;
long int arr[n];
for(i=0;i<n;i++)
{
cin>>arr[i];
}
sort(arr, arr+n);
for(i=0;i<n;i++)
{
if(arr[i]>0)
h[arr[i]]=0;
}
for(i=0;i<n;i++)
{
if(arr[i]<0 && h.find((-1)*(arr[i]))!=h.end())
{
h[(-1)*(arr[i])]=arr[i];
flag=1;
}
}
for(auto x=h.begin(); x!=h.end(); x++)
{
if(x->second!=0)
{
cout<<x->first<<" "<<x->second<<" ";
}
}
if(flag==0)
{
cout<<0;
}
cout<<endl;
}
}
给定一个由 N 个正整数对和负整数对组成的数组 arr[],可能不是按排序顺序排列的。任务是以正元素与绝对值相同的负元素配对的方式对正元素和负元素进行配对。如果元素不存在对元素,则忽略它。输出应包含按绝对值升序排列的所有对。要打印一对,应在其相应的负值之前打印正值。注意:数组中的元素是不同的。输入数组 = 1, 3 ,6 , -2, -1,-3, 2,7 输出:1 -1 2 -2 3 -3
我的代码在测试用例输入数组中失败= -1 -2 -5 -6 1 3 4 2 5 6 预期输出= 1 -1 2 -2 5 -5 6 -6 我的输出=6 -6 5 -5 1 -1 2 -2 我哪里做错了
解决方案
使用排序后的地图会std::map
产生结果。如果您愿意拥有自己的排序功能,那么请使用带有重载()
运算符的结构包装器,并记住特定于容器的算法比通用算法更好。
推荐阅读
- sql - 将日期为“31. 12. 2019”和“7/2020”的字符串有效转换为日期类型?
- php - 无法用php解压文件
- asp.net-core - IServiceScopeFactory.CreateScope 不保留日志范围
- amazon-web-services - MWS API 更新库存?
- python - 将每个对象的索引存储到二维列表中
- flutter - 如何将索引与两个应用栏分开?
- python-3.x - 如何根据条件Python为字符串生成随机顺序的数字
- python - 是否有任何框架或工具可用于实现 swagger 定义作为 AWS Chalice 的自动生成过程?
- python - Python TypeError:“NoneType”对象在函数的 if 语句中不可迭代
- flutter - Flutter:文本中间有三个点的文本溢出省略号