set_difference()の利用法について
ゲスト
ゲスト
ATOMRSS
  • コード求むID: 344
  • 登録日時:  2008/11/11 14:23
  • 最終更新日時: 2008/11/12 19:58
  • アクセス数: 219
  • タグ:  c++ stl
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

#include <algorithm>
#include <iostream>
#include <set>
#include <vector>

int main()
{
    std::set<int> someSet1;
    std::set<int> someSet2;

    someSet1.insert(50);
    someSet1.insert(60);
    someSet1.insert(10);
    someSet1.insert(20);
    someSet1.insert(30);

    someSet2.insert(50);
    someSet2.insert(10);
    someSet2.insert(30);

    // 本来はvectorではなく、std::set<int>を利用したい。
    std::vector<int> diffSet;

    std::set_difference(someSet1.begin(), someSet1.end(), someSet2.begin(), someSet2.end(), back_inserter(diffSet));
}
    
集合someSet1とsomeSet2の差分を抽出するために、set_differnce()関数を利用します。
このとき、差分結果をstd::set<int>に入れるためには、set_differnce()の引数にどのような形式で渡せばよろしいのでしょうか?


コメント

  • ゲスト
  • 1:ゲスト (BLUEPIXY)
  • 2008/11/11 21:33

あまり詳しくないのですが、
back_inserter(diffSet)でなく
inserter(diffSet, diffSet.end())
ではどうでしょうか。

これでダメなようなら
vector<int> wk で受けて、insert(wk.begin(), wk.end()) 
すればいいかと思います。

GJGJGJ

  • ゲスト
  • 2:ゲスト (のっち)
  • 2008/11/12 10:01

早速のご回答ありがとうございます。

inserterを利用して、うまくいきました。
inserter周りを整理すると、以下のようになるのですね。

呼ぶメンバ     イテレータークラス           生成用関数
push_back()   std::back_insert_iterator   std::back_inserter()
push_front()  std::front_insert_iterator  std::front_inserter()
insert()      std::insert_iterator        std::inserter()

それでは、失礼いたします。

  • GoodJob
  • 0

  • ゲスト
  • 3:ゲスト (BLUEPIXY)
  • 2008/11/12 19:58

>2
そうですね、
set は、おもにtree で構成される(vectorのような構造ではない)ので、push_back(), push_front() なんかはそぐわないということだと思います。

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント