c++ map 排序
时间: 2023-11-12 13:07:14 浏览: 82
在C 98中,map是自动根据键值进行排序的,如果你想要避免自动排序,可以通过使用自定义的比较函数来实现。你可以创建一个自定义的比较函数对象,并将其作为第三个模板参数传递给map。这个自定义的比较函数需要重载operator(),根据你的需求来定义比较规则。比如按照字符串长度进行排序,可以创建一个CmpByKeyLength的比较函数对象,重载operator()来比较字符串的长度。然后将这个比较函数对象作为map的第三个模板参数。
下面是一个示例代码,展示了如何使用自定义的比较函数来避免map的自动排序:
```cpp
#include <map>
#include <string>
#include <iostream>
using namespace std;
struct CmpByKeyLength {
bool operator()(const string& k1, const string& k2) {
return k1.length() < k2.length();
}
};
int main() {
map<string, int, CmpByKeyLength> mapStudent;
mapStudent["LiMin"] = 90;
mapStudent["ZiLinMi"] = 72;
mapStudent["BoB"] = 79;
map<string, int>::iterator iter = mapStudent.begin();
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++) {
cout << iter->first << " " << iter->second << endl;
}
return 0;
}
```
在上面的示例代码中,我们创建了一个CmpByKeyLength的比较函数对象,并将其作为map的第三个模板参数。这样就可以按照字符串长度进行排序,而不是按照默认的字典序排序。
阅读全文