【问题标题】:std::copy for copying vector to priority_queuestd::copy 用于将向量复制到 priority_queue
【发布时间】:2021-08-25 19:09:25
【问题描述】:

我正在尝试将std::vector 复制到std::priority_queue,而以下两种方法正在运行。

vector<int> parts = { 8, 4, 6, 12, 57, 28};                          //source
priority_queue<int, vector<int>, greater<int>> minHeap;              //target

方法一:

all_of(parts.begin(), parts.end(), [&minHeap](int& part){minHeap.push(part); return true;});

方法2:

for(int& part: parts) minHeap.push(part);

不过,我想知道std::copy是否也能做到这一点?

【问题讨论】:

  • 为什么不使用构造函数呢? priority_queue&lt;int, vector&lt;int&gt;, greater&lt;int&gt;&gt; minHeap(parts.begin(), parts.end()); ?
  • 令人惊讶的是我没有想到构造函数。谢谢你启发我。
  • std::all_of() 不适用于这项工作 - 它旨在检查条件是否适用于所有元素。它可能对你有用,但会让读者感到困惑。如果你想要一个算法,请使用std::for_each() - 但在这种情况下它并不比for 循环更好。
  • @Eugene 是的,我知道这是一个调整。

标签: c++ vector stl priority-queue


【解决方案1】:

是的,可以使用std::copy() 完成,但前提是您编写(或找到)自定义OutputIterator,在写入迭代器时调用队列的push() 方法。标准库没有用于调用 push() 的内置迭代器(但它有 std::front_insert_iterator 用于 push_front()std::back_insert_iterator 用于 push_back()std::insert_iterator 用于 insert() 等)。

【讨论】:

  • 感谢您的建议,我想对您自定义OutputIterator的方法做一些研究
猜你喜欢
  • 2015-01-05
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2017-05-28
相关资源
最近更新 更多