MST

星途 面试题库

面试题:C++中map键值比较规则基础应用

在C++中,我们定义了一个`std::map<int, std::string>`,键是整数类型。默认情况下,map是按什么规则对键进行比较的?如果我们想要按照自定义的降序规则对键进行排序,应该怎么做?请写出关键代码。
36.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 默认比较规则: 默认情况下,std::map<int, std::string> 按键的升序进行比较。std::map 使用红黑树数据结构来存储元素,默认的比较函数是 std::less<int>,它定义了小于关系,从而实现升序排列。
  2. 按自定义降序规则排序: 要按照自定义的降序规则对键进行排序,需要提供一个自定义的比较函数对象。以下是关键代码:
#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 就会使用这个自定义的比较规则对键进行排序。