【问题标题】:Associative Container sorted on both, key and value关联容器按键和值排序
【发布时间】:2012-08-29 03:14:41
【问题描述】:

是否有任何同时按键和值排序的关联容器?我想要 C++ 中的这个数据结构。在 Java 中,有 containsKeycontainsValue 方法。我需要这个关联数据结构的迭代器(containsKeycontainsValue)在尽可能短的时间内完成。它必须接近 log(n)。

【问题讨论】:

  • 有一个std::set,其中每个值本身都用作键,元素按该值排序。如果您想要单独的键和值对(例如std::map ) 标准库没有提供任何内容。您必须使用 Boost 或根据您的自定义要求编写自己的容器类。
  • this existing post 包含通常的答案(Boost 多索引)。您的问题是否与该帖子重复?
  • @jogojapan 不是我理解的问题。在这里,OP 关心的是键和值的迭代顺序,而不是把值映射回键。
  • 我想要单独的键和值。我可以在 boost 中找到这个吗?或者有什么方法可以实现一个非常接近这个的容器?
  • @MattBall 好的,明白了。不过,我不得不说,Java containsKeycontainsValue 不用于迭代。在相关说明中,containsValue 在 Java 中不需要为 O(log n)。

标签: c++ algorithm data-structures


【解决方案1】:

您所描述的内容听起来很像Boost.Bimap 容器框架,它允许您构建双向映射,让您同样高效地查找键和值。这可能不是您正在寻找的内容,但该库已经过充分测试,可能是一个很好的起点。

希望这会有所帮助!

【讨论】:

  • 这似乎是一个很好的选择。让我检查一下。谢谢
【解决方案2】:

您可能想要给定 T2 的所有 T1,反之亦然。这不完全是你所说的,但如果这就是你想要的, boost::bimap 就是要走的路。

std::set > 将以一种基本的方式做你想做的事。辅助 std::set 和 std::set 给你全局 contains_key 和 contains_value in O(log(n)),如果这是你想要的。

std::map > 为您提供方便的 O(log(n)) 访问键的值。维护一个倒置副本可以让您方便地 O(log(n)) 访问一个值的键。

这实际上完全取决于您想要做什么,以及数据是任意一组键、值对还是以某种方式受到限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2023-04-06
    • 2011-01-03
    相关资源
    最近更新 更多