【问题标题】:How to check whether unordered_map contains a specific value? [duplicate]如何检查 unordered_map 是否包含特定值? [复制]
【发布时间】:2021-09-22 06:25:21
【问题描述】:

在 Java 中,containsValue() 函数检查哈希图是否包含特定值。它寻找值,而不是键。

如何在 c++ 中实现?

尤其是unordered_map

【问题讨论】:

  • 这里你可以看到所有的函数,你会找到检查包含的函数。 en.cppreference.com/w/cpp/container/unordered_map
  • unordered_map中没有这个东西,你必须自己编程(~3-4行代码)。
  • java 通常采用与 c++ 完全不同的方法。在 c++ 中,当一个操作不能有效地完成时,很可能没有标准方法,但您可以在需要时自己实现它。另一方面,Java 试图做到万无一失,因此它会为您提供方法,而不是假设您可以编写它。地图的目的是根据键有效地查找值,而不是查找值。
  • unordered_map 不支持,但我们可以使用boost:bimap 作为替代来实现它。
  • 如果你需要这个,map (ordered or not) 对你来说可能是一个错误的数据结构。

标签: c++ unordered-map


【解决方案1】:

没有这样的方法,但您可以使用std::find_if 和 lambda 轻松编写:

std::unordered_map<int, std::string> m {{1, "bar"}, {2, "foo"}};
std::string needle = "foo";
auto found = std::find_if(m.begin(), m.end(), [&needle](const auto& p){return p->second == needle;});
if (found != m.end()) {
    // found->second is "foo"
} else {
    // not found
}

【讨论】:

  • 这可能有性能问题,我更喜欢使用boost::bimap
  • @prehistoricpenguin boost::bimap 本身就有性能问题。这是一件大事,我不确定它是否真的会改善小地图的任何东西。您当然可以编写自己的答案,展示如何使用 bimap 做到这一点,尽管我不确定这是否是 OP 想要的(假设他们已经在使用 std::unordered map)。
  • @Yksisarvinen 您不会将unordered_map 用于少量元素,而是使用排序向量。
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 2021-12-24
  • 2020-12-30
相关资源
最近更新 更多