📜  在C ++ STL中映射key_comp()(1)

📅  最后修改于: 2023-12-03 15:23:22.205000             🧑  作者: Mango

C++ STL中的key_comp()映射函数介绍

在C++ STL的map和multimap容器中,key_comp()是一个用来比较两个元素的函数对象。这个函数对象确定了map中元素的顺序,因此它是map中非常重要的一个函数。本文将介绍key_comp()在C++ STL中的使用方法,包括语法、参数和示例。

语法

以下是key_comp()函数的语法:

key_compare key_comp() const;

其中,key_compare是一个与用户定义数据类型的“小于”比较函数相对应的类型。以map<int, string>为例,key_compare类型的默认“小于”比较函数为less。在multimap<int, string>中,key_compare类型的默认“小于”比较函数同样为less

功能

key_comp()函数返回map中关键字“小于”比较函数的一个拷贝。这个函数可以用来比较map中两个关键字的大小。当我们需要对map进行自定义排序时,可以使用这个函数。在使用map或multimap的时候,我们必须牢记:map内所有元素被按照其关键字的大小来排序。那么,关键字之间的大小比较是如何完成的呢?

理解“小于”比较函数

在C++ STL map和multimap容器中,大多数操作都需要用到关键字的“小于”比较函数。当我们向一个map或multimap容器中插入一个新元素时,这个元素中的关键字与容器中已有元素的关键字进行比较。比较结果决定了新元素的插入位置,以维持容器中元素的有序性。

下面是一个例子,展示如何使用关键字“小于”比较函数:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int, string> mymap;
    mymap[4] = "four";
    mymap[2] = "two";
    mymap[7] = "seven";
    mymap[5] = "five";

    // 创建一个key_compare类型的对象
    map<int, string>::key_compare mycomp = mymap.key_comp();

    cout << "mymap contains:\n";

    // 遍历输出元素
    int highest_key = mymap.rbegin()->first;
    map<int, string>::iterator it;
    for (it = mymap.begin(); it != mymap.end(); it++)
    {
        cout << it->first << " => " << it->second << endl;

        // 当遍历到最后一个元素时,不进行比较
        if (mycomp((*it).first, highest_key) && it != mymap.end())
            cout << it->first << " is higher than " << highest_key << endl;
    }

    return 0;
}

上述代码定义了一个包含4个元素的map,然后创建了一个key_compare类型对象mycomp,用来比较map中的关键字。在遍历输出map中所有元素时,使用mycomp比较了每个关键字与最大关键字之间的大小关系,然后输出结果。结果如下所示:

mymap contains:  
2 => two  
4 => four  
5 => five  
5 is higher than 4  
7 => seven  
7 is higher than 5  
7 is higher than 4

通过这个例子,我们可以看到关键字之间“小于”比较函数的作用,以及如何使用map的key_comp()函数。

总结

key_comp()是map和multimap容器中非常重要的一个函数。它返回了一个比较函数对象,这个对象可以用来比较map中两个关键字之间的大小。使用map时,我们必须通过关键字的大小关系来对map中的元素进行排序。因此,我们需要了解“小于”比较函数在map中的作用,并使用key_comp()函数来获取这个函数对象。