23

c++でtr1 :: unordered_set型のセットの交差と結合を行う方法は? 私はそれについて多くの参照を見つけることができません。

参照とコードは高く評価されます。どうもありがとうございました。

更新: tr1::unordered_set は、交差、結合、差の関数を提供する必要があると推測しました..それがセットの基本的な操作であるためです。もちろん自分で関数を書くことはできますが、tr1から組み込み関数があるかどうかは疑問です。どうもありがとうございました。

4

3 に答える 3

17
于 2009-05-22T05:08:10.650 に答える
14

それには大したことはありません-交差については、一方のすべての要素を調べて、それが他方にあることを確認するだけです. ユニオンの場合、両方の入力セットからすべてのアイテムを追加します。

例えば:

void us_isect(std::tr1::unordered_set<int> &out,
        const std::tr1::unordered_set<int> &in1,
        const std::tr1::unordered_set<int> &in2)
{
    out.clear();
    if (in2.size() < in1.size()) {
        us_isect(out, in2, in1);
        return;
    }
    for (std::tr1::unordered_set<int>::const_iterator it = in1.begin(); it != in1.end(); it++)
    {
        if (in2.find(*it) != in2.end())
            out.insert(*it);
    }
}

void us_union(std::tr1::unordered_set<int> &out,
        const std::tr1::unordered_set<int> &in1,
        const std::tr1::unordered_set<int> &in2)
{
    out.clear();
    out.insert(in1.begin(), in1.end());
    out.insert(in2.begin(), in2.end());
}
于 2009-05-22T04:49:40.317 に答える