中兴笔试排序题求解答
给定一组数,按照数组中出现的次数依次从大到小排序,出现次数一样的按照数组中的先后顺序输出 比如:输入:1 1 1 1 3 3 3 4 5 2 6 6 6 6 6输出:6 6 6 6 6 1 1 1 1 3 3 3 4 5 2
  求代码共享! 
  我的输出: 
  6 6 6 6 6 1 1 1 1 3 3 3 5 4
  2
  我知道是map底层排序不稳定排序的原因,但是不知道怎么解决,求解决! 
  代码如下:
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int, int> lhs, pair<int, int>rhs)
{
	return lhs.second>rhs.second;
}
int main()
{
	while (1)
	{
		vector<int> vec;
		map<int, int> m;
		int num;
		cout << "输入数组元素的个数:";
		cin >> num;
		//输入数组并计数
		int i;
		for (i = 0; i<num; i++)
		{
			int temp;
			cin >> temp;
			vec.push_back(temp);
			if (m.find(temp) == m.end())
				m.insert(make_pair(temp, 1));
			else
				m[temp]++;
		}
		vector<pair<int,int> > res;
		for (i=0;i<num;i++)
		{
			if(find(res.begin(),res.end(),make_pair(vec[i],m[vec[i]]))==res.end())
				res.push_back(make_pair(vec[i],m[vec[i]]));
		}
		stable_sort(res.begin(),res.end(),compare);
		for(vector<pair<int,int> >::iterator it=res.begin();it!=res.end();it++)
			for(i=0;i<it->second;i++)
				cout<<it->first<<" ";
		cout<<endl;
	}
	return 0;
}
 腾讯公司福利 1145人发布
腾讯公司福利 1145人发布 投递大连飞创信息技术有限公司等公司10个岗位
投递大连飞创信息技术有限公司等公司10个岗位