首页 > 解决方案 > 在 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 我哪里做错了

标签: c++data-structureshashmap

解决方案


使用排序后的地图会std::map产生结果。如果您愿意拥有自己的排序功能,那么请使用带有重载()运算符的结构包装器,并记住特定于容器的算法比通用算法更好。


推荐阅读