如何在 boost::unordered_flap_map 中使用异构类型

问题描述 投票:0回答:1

Boot unordered_flat_map 非常好,它比 std::unordered_map 快得多。我正在尝试将它与异构类型一起使用:

boost::unordered::unordered_flat_map<std::string, int> my_map;
my_map.emplace(std::string("Hello"), 1);
my_map.find(std::string_view("Hello")); 
// no instance of overloaded function matches the argument list
            argument types are: (std::string_view)

现在,因为我创建了一个具有键类型 std::string 的映射,所以有一个采用 std::string 的查找函数,但也有一个采用 K 的模板化查找函数,通常这些东西应该可以工作容器:

  1. 知道如何对异构类型进行哈希处理,并且
  2. 知道将异构类型作为右侧的相等运算符。

即使我这样做:

auto equal_to = [](auto& lhs, auto& rhs) { return lhs == rhs; };

并将这个相等类传递给容器我仍然收到错误:

boost::unordered::unordered_flat_map<std::string, int, decltype(equal_to)> my_map;

我该如何让它发挥作用?

c++ boost
1个回答
0
投票

还有一个解决方案,但我需要更多空间 =]

您可以将查找包装在函数中(例如):

int lookup(std::string_view k) {
    static std::string backing;
    backing = k;
    return my_map.find(backing);
}

由于

std::string
是静态的,因此它不会不断地分配和取消分配每个函数调用。

© www.soinside.com 2019 - 2024. All rights reserved.