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

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

在使用C++ STL中的unordered_map容器时,我们经常需要对map中的键值进行比较操作。C++ STL中提供了一个key_eq()函数,该函数可以用于比较键值是否相等。

语法

struct key_equal {
    bool operator() (const Key& x, const Key& y) const;
}

功能

key_equal结构体是一个函数对象,用于比较两个键值是否相等。当unordered_map执行查找、删除、插入等操作时,需要使用key_equal进行键值比较。

参数

  • x: 待比较的键值x
  • y: 待比较的键值y

返回值

  • true:如果x和y相等
  • false:如果x和y不相等

示例代码

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

struct MyHash {
    size_t operator() (const string& str) const {
        return hash<string>()(str);
    }
};

struct MyEqual {
    bool operator() (const string& str1, const string& str2) const {
        return str1.length() == str2.length();
    }
};

typedef unordered_map<string, int, MyHash, MyEqual> mymap;

int main() {
    mymap m;
    m.emplace("hello", 1);
    m.emplace("world", 2);
    m.emplace("abc", 3);

    for (const auto& p : m) {
        cout << p.first << ": " << p.second << endl;  // 输出键和值
    }

    // 查找键值为"hi"的元素
    auto it = m.find("hi");
    if (it != m.end()) {
        cout << "Value: " << it->second << endl;
    } else {
        cout << "Key not found!" << endl;
    }

    return 0;
}

在上面的代码中,我们自定义了哈希函数MyHash和比较函数MyEqual。MyHash使用了默认的hash函数来计算字符串的哈希值,MyEqual比较字符串的长度。然后将这两个函数作为模板参数传递给unordered_map容器。我们插入了三个键值对,分别是”hello”: 1, “world”: 2, “abc”: 3。然后遍历unordered_map并输出键和值。接着查找键值为”hi”的元素,由于该元素不存在,输出Key not found!。

结论

在使用C++ STL中的unordered_map容器时,我们需要使用key_eq()函数进行键值比较。我们可以自定义比较函数来实现不同的比较方式,以满足不同的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程