名前空間
変種
操作

std::priority_queue<T,Container,Compare>::push_range

From cppreference.com
 
 
 
 
template< container-compatible-range<value_type> R >
void push_range( R&& rg );
(C++23から)

priority_queueに、rgの各要素のコピーを挿入します。これは、以下のように行われます。

  • c.append_range(std::forward<R>(rg)) (基底コンテナ c が適切な append_range メンバ関数を持つ場合)のように、または
  • ranges::copy(rg, std::back_inserter(c)) (それ以外の場合)のように挿入されます。

その後、ranges::make_heap(c, comp)のようにヒーププロパティを復元します。挿入後、ranges::is_heap(c, comp)trueになります。

rg の各イテレータはちょうど1回逆参照されます。

目次

[編集] パラメータ

rg - コンテナ互換範囲。つまり、要素が T に変換可能な input_range

[編集] 計算量

計算量は、c.append_rangeの計算量と、ranges::make_heap(c, comp)の計算量の合計です。

[編集] 注釈

機能テストマクロ 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) ranges対応の構築と挿入

[編集]

#include <initializer_list>
#include <queue>
#include <version>
#ifdef __cpp_lib_format_ranges
    #include <print>
    using std::println;
#else
    #define FMT_HEADER_ONLY
    #include <fmt/ranges.h>
    using fmt::println;
#endif
 
int main()
{
    std::priority_queue<int> adaptor;
    const auto rg = {1, 3, 2, 4};
 
#ifdef __cpp_lib_containers_ranges
    adaptor.push_range(rg);
#else
    for (int e : rg)
        adaptor.push(e);
#endif
 
    println("{}", adaptor);
}

出力

[4, 3, 2, 1]

[編集] 関連項目

要素を挿入し、基底コンテナをソートする
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)