【问题标题】:Associative container with finding element with the lowest value具有最低值的查找元素的关联容器
【发布时间】:2014-10-20 11:37:52
【问题描述】:

我正在寻找最佳解决方案。我想存储对象:容器中的键值。我需要通过键对每个元素进行“良好”访问,并且我需要找到具有最低值的元素。

您会推荐什么容器?有没有比 std::map 更好的解决方案(在 STL 或 Boost 中)? (访问元素是可以的,但寻找最小值是 O(n) 我猜)..

[已编辑]

抱歉,我错过了添加一件非常重要的事情。我实际上想获得最低元素(具有最低值)并将其删除...

假设我的用法是:

1) 访问某些元素(按键)

2) 访问具有最低值的元素并将其删除

3) 如果容器不是空的,则转到第一步

我应该使用什么?你怎么看?

【问题讨论】:

  • 好吧,您可以将std::map 与自定义比较器函数一起使用,以便它按值而不是键排序。那么“最低”条目将始终是yourMap.begin()
  • @Joachim Pileborg:这怎么可能,因为std::map 需要一个二进制谓词,将两个元素键作为参数?
  • @TNA 好吧,如果您有密钥,那么您就可以获取数据。如果你有数据,你可以用它来做比较。
  • @JoachimPileborg 等等,您是否建议比较器函数应该查询地图以获取数据?说得委婉一点,这……不是一个好主意。
  • @BartekBanachewicz 我没有说这是个好主意,但它是一种解决方案。

标签: c++ algorithm boost data-structures stl


【解决方案1】:

您可以将第二个容器(std::vectorstd::set)与迭代器一起用于您的元素,并根据您的需要对其进行排序。

【讨论】:

  • 嗯... std::map 和 std::priority_key 以及从 std::map 的元素的迭代器怎么样?
  • @peter55555 你的意思是std::priority_queue?是的,如果您为迭代器提供二进制谓词,那应该可以工作。
  • std::priority_queue 的要点是,您只能访问“顶部”(在您的情况下为最低值)。如果这是你需要的,那完全没问题。
  • 非常感谢。 (是的,我的意思当然是 std::priority_queue。抱歉弄错了)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2019-09-24
相关资源
最近更新 更多