c++之map排序
为了实现查找,map在插值时已经对key值进行了排序(使用红黑树结构)。如果想对map的value值进行排序,由于sort函数
只可以对有序容器
进行排序,那么可以将map转为vector后进行排序。
#include <iostream>
#include <map>
#include <algorithm>
// 对map不能直接排序, 使用vector进行排序
bool compVec(const std::pair<int, float>& a, const std::pair<int, float>& b)
{
return a.second > b.second;
}
struct compByValue
{
bool operator()(std::pair<int, float>& lhs, std::pair<int, float>& rhs)
{
return lhs.second > rhs.second;
}
};
int main(int argc, char** argv)
{
std::map<int, float> map;
map[2] = 3.9;
map.insert(std::pair<int, float>(7, 28.5));
map.insert(std::pair<int, float>(4, -0.99));
map.insert(std::map<int, float>::value_type(1, -0.17));
map.insert(std::make_pair(6, 15.7));
std::cout << "before sort" << std::endl;
for (auto it = map.begin(); it != map.end(); ++it)
{
std::cout << it->first << " : " << it->second << std::endl;
}
// turn into vector
std::vector<std::pair<int, float> > map_vec(map.begin(), map.end());
std::sort(map_vec.begin(), map_vec.end(), compVec);
// std::sort(map_vec.begin(), map_vec.end(), compByValue());
std::cout << "after sort(descending order): " << std::endl;
for (auto it = map_vec.begin(); it != map_vec.end(); ++it)
{
std::cout << it->first << " : " << it->second << std::endl;
}
return 0;
}
输出结果为:
before sort
1 : -0.17
2 : 3.9
4 : -0.99
6 : 15.7
7 : 28.5
after sort(descending order):
7 : 28.5
6 : 15.7
2 : 3.9
1 : -0.17
4 : -0.99
注: 由结果可知,在map插入后,已经按照key值进行了排序。
原文地址:https://www.cnblogs.com/ChrisCoder/p/10433543.html
时间: 2024-10-22 11:05:41