面试题答案
一键面试- 默认比较规则:
默认情况下,
std::map<int, std::string>
按键的升序进行比较。std::map
使用红黑树数据结构来存储元素,默认的比较函数是std::less<int>
,它定义了小于关系,从而实现升序排列。 - 按自定义降序规则排序: 要按照自定义的降序规则对键进行排序,需要提供一个自定义的比较函数对象。以下是关键代码:
#include <iostream>
#include <map>
#include <string>
// 自定义比较函数对象,实现降序比较
struct DescendingComparator {
bool operator()(int a, int b) const {
return a > b;
}
};
int main() {
// 使用自定义比较函数对象定义 std::map
std::map<int, std::string, DescendingComparator> myMap;
myMap[3] = "three";
myMap[1] = "one";
myMap[2] = "two";
// 遍历输出,此时会按降序排列
for (const auto& pair : myMap) {
std::cout << pair.first << " : " << pair.second << std::endl;
}
return 0;
}
在上述代码中:
- 定义了一个
DescendingComparator
结构体,重载了()
运算符,实现了降序比较逻辑,即a > b
。 - 在定义
std::map
时,将第三个模板参数指定为DescendingComparator
,这样std::map
就会使用这个自定义的比较规则对键进行排序。