使用C++20的异构查找,这可以实现(请参见unordered_map::find()
文档)。 为了使其正常工作,需要定义哈希函数和相等函数,例如:
struct hash {
template <typename T>
auto operator()(const std::pair<T, T>& pair) const {
return std::hash<T>{}(pair.first) ^ std::hash<T>{}(pair.second);
}
using is_transparent = void;
};
struct equal {
template <typename A, typename B>
auto operator()(const std::pair<A, A>& a,
const std::pair<B, B>& b) const {
return a.first == b.first && a.second == b.second;
}
using is_transparent = void;
};
为了使用定义的函数对象,地图的类型需要更改为std::unordered_map<std::pair<std::string, std::string>, int, hash, equal>
。
find()
现在可以按预期工作:
using namespace std::literals;
std::unordered_map<std::pair<std::string, std::string>, int, hash, equal> map{};
map.insert({std::pair{"a"s, "b"s}, 42});
if (auto it = map.find(std::pair{"a"sv, "b"sv}); it != map.end())
std::cout << it->second << std::endl;
if (auto it = map.find(std::pair{"x"s, "y"s}); it != map.end())
std::cout << it->second << std::endl;
可以在这里进行实现。
myMap
的声明 :D - Enlico