serna37's Library

Logo

C++ アルゴリズムとデータ構造のライブラリ

View the Project on GitHub serna37/library-cpp

:heavy_check_mark: マージテク
(library/sequence/merge.hpp)

マージテク

できること

計算量

使い方

merge(A, B);
merge(stA, stB);
merge(mpA, mpB, [&](map<int, int> &B, pair<int, int> a){
    auto [k, v] = a;
    B[k] += v;
});

Verified with

Code

#pragma once
template <typename T> void merge(vector<T> &A, vector<T> &B) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) B.push_back(v);
    A.clear();
}
template <typename T> void merge(set<T> &A, set<T> &B) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) B.insert(v);
    A.clear();
}
template <typename T, typename F> void merge(T &A, T &B, F f) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) {
        f(B, v);
    }
    A.clear();
}
#line 2 "library/sequence/merge.hpp"
template <typename T> void merge(vector<T> &A, vector<T> &B) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) B.push_back(v);
    A.clear();
}
template <typename T> void merge(set<T> &A, set<T> &B) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) B.insert(v);
    A.clear();
}
template <typename T, typename F> void merge(T &A, T &B, F f) {
    if (A.size() > B.size()) swap(A, B);
    for (auto &&v : A) {
        f(B, v);
    }
    A.clear();
}
Back to top page