提问者:小点点

在C++中使用键对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[],可能不按排序顺序排列。 任务是将正,负元素配对,使一个正元素与一个绝对值相同的负元素配对。 如果一个元素没有pair元素,那么忽略它。 输出应包含按绝对值递增顺序排列的所有对。 若要打印成对,应先打印正值,然后再打印其对应的负值。 注意:数组中的元素是不同的。 输入数组=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我在哪里做错了


共1个答案

匿名用户

使用std::map有一个排序后的映射会产生结果。 如果您愿意拥有自己的排序函数,那么可以使用带有overloaded()运算符的struct包装器,并记住特定于容器的算法要比通用算法好。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|键|hashmap|排序|排序)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?