c++ - std::set_differenceセットキーとマップキーを比較することは可能ですか?

原文 c++ map set

新しい文字列のセットを取得し、マップキーとして1つ取得します。そして、one way set_differenceを実行したいと思います(注-set_symmetric_differenceではありません)。だから現在私はこのような醜いコードを持っています:

    std::map<std::string, boost::shared_ptr<some_class> > _ds;
std::set<std::string> compare_and_clean(std::set<std::string> &new_)
{
    std::set<std::string> result;
    std::set<std::string> old;

    for (std::map<std::string, std::string>::iterator mi = _ds.begin(); mi != _ds.end(); ++mi)
        old.insert(mi->first);

    std::set_difference( old.begin(), old.end(), new_.begin(), new_.end(), inserter(result, result.begin()));

    for (std::set<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
        _ds.erase(*i);
    }
    return result;
}


マップキーに対してset_differenceを実行し、よりクリーンな方法で設定する方法を知りたいですか?
答え
はい:変換反復子を使用して、std::mapのキーだけを反復できます。

このような変換反復子の2つの実装(1つはBoostを使用し、もう1つはスタンドアロン)はan answer I provided to another questionにあります。
関連記事

c++ - 配列をC++の関数に渡す

c++ - 述語ファンクタのパッケージ化

c++ - 空のBoostアキュムレータを使用する

c++ - VC++リソースコンパイラ(RC)オプション/ n…?

c++ - GL_DRAW_FRAMEBUFFERターゲットを使用すると、glBindFramebufferが「無効な操作」GLエラーを引き起こす

c++ - クラスのメンバーアクセス

c++ - ImageMagick C++ API出力16ビットグレースケールpng?

c++ - TWAINでサポートされている解像度を列挙するにはどうすればよいですか

c++ - C++入力が正しいかどうかをユーザーに尋ねるエラー

c# - 分類ライブラリ