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()函数进行键值比较。我们可以自定义比较函数来实现不同的比较方式,以满足不同的需求。