C++ STL 集合排序
map<key,value>
和set<key>
的内置键值比较函数排序
// 按照键值升序排列
map<string,int,less<string>> map1; // 等效map<string,int> map1;
set<string,less<string>> set1; // 等效set<string>;
// 按照键值降序排列
map<string,int,greater<string>> map1;
set<string,greater<string>> set1;
map<key,value>
和set<key>
的自定义比较函数排序
首先定义比较函数,例如:
/***************************************************
* map key compare
* include compare string's length
* 用于排序map的keys,如:"P1","P2","P10",...
* 用法:
* (1)map键值排序:map<string,int,cmpByKey> map1;
* (2)set排序: set<string,cmpByKey> set1;
* (3)vector<string>排序:
* #include <algorithm>
* vector<string> vec1;
* std::sort(vec1.begin(), vec1.end(), cmpByKey());
****************************************************/
struct cmpByKey {
bool operator()(const std::string& lhs, const std::string& rhs) const
{
bool ret;
if (lhs.size() == rhs.size())
ret = lhs < rhs ? true : false;
else
ret = lhs.size() < rhs.size() ? true : false;
return ret;
}
};
其次声明使用自定义比较函数的对象
// 使用自定义键值比较函数的map,set对象
map<string,int,cmpByKey> map1;