Namespaces
Variants

std::experimental::erase_if (std::unordered_multiset)

ja.cppreference.net より

 
 
実験的
技術仕様書
ファイルシステムライブラリ (filesystem TS)
ライブラリ基礎 (library fundamentals TS)
ライブラリ基礎2 (library fundamentals TS v2)
ライブラリ基礎3 (library fundamentals TS v3)
並列処理の拡張 (parallelism TS)
並列処理の拡張2 (parallelism TS v2)
並行処理の拡張 (concurrency TS)
並行処理の拡張2 (concurrency TS v2)
コンセプト (concepts TS)
レンジ (ranges TS)
リフレクション (reflection TS)
数学的特殊関数 (special functions TR)
実験的 Non-TS
パターンマッチング
線形代数
std::execution
契約
2Dグラフィックス
 
 
ヘッダで定義 <experimental/unordered_set>
template< class Key, class Hash, class KeyEqual, class Alloc, class Pred >
void erase_if( std::unordered_multiset<Key, Hash, KeyEqual, Alloc>& c, Pred pred );
(library fundamentals TS v2)

述語を満たすすべての要素を削除しますpred コンテナから。以下と同等:

for (auto i = c.begin(), last = c.end(); i != last;)
{
    if (pred(*i))
        i = c.erase(i);
    else
        ++i;
}

パラメータ

c - 要素を削除するコンテナ
pred - 削除対象の要素を決定する述語

計算量

線形。

例

#include <experimental/unordered_set>
#include <iostream>
template<typename Os, typename Container>
inline Os& operator<<(Os& os, Container const& container)
{
    os << "{ ";
    for (const auto& item : container)
        os << item << ' ';
    return os << '}';
}
int main()
{
    std::unordered_multiset<int> data{3, 3, 4, 5, 5, 6, 6, 7, 2, 1, 0};
    std::cout << "Original:\n" << data << '\n';
    auto divisible_by_3 = [](auto const& x) { return (x % 3) == 0; };
    std::experimental::erase_if(data, divisible_by_3);
    std::cout << "Erase all items divisible by 3:\n" << data << '\n';
}

出力例:

Original:
{ 0 1 2 7 6 6 5 5 4 3 3 }
Erase all items divisible by 3:
{ 1 2 7 5 5 4 }

関連項目

特定の条件を満たす要素を削除する
(関数テンプレート & アルゴリズム関数オブジェクト)