更改c++map排序规则
时间: 2023-08-01 16:12:38 浏览: 117
在 C++ STL 中,`map` 容器的默认排序规则是按照键(`key`)从小到大的顺序进行排列。如果想要更改排序规则,需要使用自定义比较函数(`Compare`)或者自定义比较类(`Compare class`)。
以下是一个示例代码:
```c++
#include <iostream>
#include <map>
using namespace std;
// 定义一个自定义比较函数,按照键从大到小排序
bool myCompare(int a, int b) {
return a > b;
}
int main() {
// 定义一个 map 容器,并使用自定义比较函数
map<int, string, decltype(&myCompare)> myMap(&myCompare);
// 向 map 中插入元素
myMap.insert({2, "apple"});
myMap.insert({5, "banana"});
myMap.insert({1, "orange"});
myMap.insert({3, "pear"});
myMap.insert({4, "watermelon"});
// 遍历 map
for (const auto& p : myMap) {
cout << p.first << " " << p.second << endl;
}
return 0;
}
```
上述代码会输出:
```
5 banana
4 watermelon
3 pear
2 apple
1 orange
```
其中 `decltype(&myCompare)` 表示函数指针类型,`&myCompare` 表示取自定义比较函数的地址。在定义 `map` 容器时,使用该函数指针类型作为第三个模板参数,表示自定义比较函数。这样就可以实现按照键从大到小的排序规则。
你也可以使用自定义比较类来实现更加复杂的排序规则。在自定义比较类中,需要重载 `operator()` 运算符,用于比较两个元素的大小。
阅读全文