C++中对于map结构中的某一个元素或者某一个值进行排序

       map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。这是一种map存放数据结构的方式。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。

      但是,我们除了希望能够查询某个学生的成绩,或许还想看看整体的情况。我们想把所有同学和他相应的成绩都输出来,并且按照我们想要的顺序进行输出:比如按照学生姓名的顺序进行输出,或者按照学生成绩的高低进行输出。换句话说,我们希望能够对map进行按Key排序或按Value排序,然后按序输出其键值对的内容。这就需要对map进行排序。

     看一下以下这个案例:

     using STLMAPTracks = std::map<uint32_t, submapTrack>;

     using submapTrack = std::map<uint32_t, uint32_t>;

此时需要对submapTrack中的大小size进行排序,需要先转化:vector<pair<uint32_t, submapTrack> >类型,再对这个类型的submapTrack的size用sort进行排序:

int cmp(const pair<uint32_t, submapTrack>& x, const pair<uint32_t, submapTrack>& y)
{
	return x.second.size() > y.second.size();
}

void sortMapByValue(map<uint32_t, submapTrack>& tMap, vector<pair<uint32_t, submapTrack> >& tVector)
{
	for (map<uint32_t, submapTrack>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)
		tVector.push_back(make_pair(curr->first, curr->second));

	sort(tVector.begin(), tVector.end(), cmp);
}
	vector<pair<uint32_t, submapTrack>> tVector;
	sortMapByValue(tracks, tVector);
	STLMAPTracks tracksL;


猜你喜欢

转载自blog.csdn.net/wwwssszheren/article/details/81003025