C++ STL中的unordered_multimap key_eq() 函数

C++ STL中的unordered_multimap key_eq() 函数

在处理数据时,关键字是一个很重要的概念。对于unordered_multimap,它是一个基于哈希表实现的C++ STL容器,保存的是一个键值对集合,其中key是唯一的标识符。key_eq()是unordered_multimap的一个重要函数,它主要用于比较键值是否相等。

unordered_multimap的常用函数

先了解一下unordered_multimap的常用函数:

  1. insert(key, value):将键值对插入容器中,并返回一个迭代器指向它
#include <unordered_map>
using namespace std;

int main() {
    unordered_multimap<int, int> umap;
    umap.insert({1, 10});
    umap.insert({1, 20});
    umap.insert({2, 30});

    return 0;
}
  1. find(key):在容器中查找某个键为key的元素,并返回一个迭代器指向它,如果未找到,则返回unordered_map::end()
#include <unordered_map>
#include <iostream>
using namespace std;

int main(){
    unordered_multimap<int, int> umap;
    umap.insert({1, 10});
    umap.insert({1, 20});
    umap.insert({2, 30});

    auto it = umap.find(1);
    if(it != umap.end()){
        cout << "key = " << it->first << ", value = " << it->second << endl;
    }

    return 0;
}
  1. erase(key):从容器中删除键值为key的元素
#include <unordered_map>
using namespace std;

int main(){
    unordered_multimap<int, int> umap;
    umap.insert({1, 10});
    umap.insert({1, 20});
    umap.insert({2, 30});

    umap.erase(1);

    return 0;
}

key_eq()函数

unordered_multimap采用哈希表存储元素,同时在同一个桶中可能会出现多个元素,因此需要借助键值对中的key来判断元素是否相等。因此,key_eq()函数就是用来判断键值对中的key是否相等。

  1. key_eq()的定义
class unordered_multimap {
    ...
    class key_equal {
        public:
        bool operator() (const key_type& k1, const key_type& k2) const;
    };
    ...
};

可以看到,key_eq()定义了一个名为key_equal的类,它只有一个名为operator()的成员函数,而这个成员函数就是用来判断键值对中的key是否相等。我们必须给定一个键值对中的key类型,这个类型可以在unordered_multimap的定义时指定。

  1. 自定义key_eq()函数

unordered_multimap提供了一个默认的key_eq()函数,它是std::equal_to(),这个函数是std::equal_to的一个实例化对象。

如果需要自定义键值对中的key相等的判断方式,可以通过自定义一个结构体来实现:

struct hash_eq{
    bool operator()(const string& s1, const string& s2) const{
        return s1.size() == s2.size() && s1[0] == s2[0];
    }
};
unordered_multimap<string, int, hash<string>, hash_eq> umap;

由此可见,在自定义unordered_multimap的容器中的元素相等时,需要重载operator(),并在这个函数内部比较键值对中的key是否相等。

总结

unordered_multimap具有存储键值对集合的特点,key_eq()是用于比较键值对中的key是否相等的函数。自定义key_eq()函数时需要重载operator(),并在这个函数内部比较键值对中的key是否相等。应用unordered_multimap可以简化对键值对集合的操作,避免了手动构造哈希表的麻烦的步骤,提高了代码开发的效率,是一个很好用的容器。同时,在使用时要注意合理选择不同的哈希函数、键值对类型及自定义key_eq()函数,以便更好的满足实际应用需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程