だから2 std::map
<string, shared_ptr<file> >
1つは '古い' 1つは '新しい'削除されましたので、differeneを繰り返し実行し、shared_ptrに何かすることができます。そのようなことは可能なのですか?マップキーのリストを別のマップから減算して新しいマップを得る方法(地図A - mab B =地図C)
5
A
答えて
9
自分で書くことは簡単ですが(A
を繰り返して、B
にキーがあるかどうか確認してください)、これはstd::set_difference
の仕事のようです。我々は、しかし、キーを比較するために、ラムダまたはいくつかのカスタム述語が必要になります:
#include <iterator>
#include <map>
#include <string>
#include <algorithm>
typedef std::map<std::string, MyPtr> my_map;
my_map A; // given
my_map B; // given
void make_a_difference()
{
my_map C; // will hold the result
std::set_difference(A.begin(), A.end(),
B.begin(), B.end(),
std::insert_iterator<my_map>(C, C.end()),
[](const my_map::value_type & a, const my_map::value_type & b)
{ return a.first < b.first; }
);
}
あなたはこの自分を書きたい場合はあなたが行うことができますので、あなたは、両方の範囲がすでにソートされているという事実を利用して検討すべきです並行して2つのイテレータを進めることにより、存在のフラットな検索よりも優れています。
あなたがC++ 11を持っていない場合は、だけではなく、ラムダのこの述語を使用します。
bool my_comp(const my_map::value_type & a, const my_map::value_type & b)
{
return a.first < b.first;
}
は、マップされた型には比較がないこと注意してください!したがって、両方のマップに同じ文字列キーがある場合、2つのマップされた値が異なる場合でも、結果にそのような項目はありません。これが望ましくない場合は、別の出力コンテナ(たとえばstd::multimap<my_map::key_type, my_map::mapped_type>
)と別の述語が必要です。
関連する問題
- 1. Googleマップの地図
- 2. マップ内の地図のC++ STL地図が正しく挿入されない
- 3. マップ方法と縮小方法Elixirでの地図のリスト
- 4. Googleマップの複数の地図地図とPAN
- 5. 別のマップで地図をデストラクションしますか?
- 6. 地上からの議会地方の地図を基本図として
- 7. 地図はGoogleマップでのApp
- 8. ドローの地図内の地図から値を取得する方法
- 9. 地図をスーパークラスジェネリックタイプのマップにキャスト
- 10. Android - GoogleマップのAPIが地図を表示していない
- 11. タイプ(地図。地図)
- 12. 機能について「地図を取得する」Googleマップandroid
- 13. Googleマップ:地図要素から緯度と経度を取得
- 14. 地図上のマップ内のベクトル
- 15. アンドロイドv2のマップに地図のスケールバーを表示する方法
- 16. Androidマップ:地図上でポリラインをアニメーション化する方法
- 17. Googleマップv2の地図検索バー
- 18. スカラフラットとの混乱マップ、地図、フラット化
- 19. 迅速な3つのGoogleマップ - 地図
- 20. 新しい地図を追加する前にGoogleマップからすべてのマーカーを削除する方法
- 21. スパークRDD-地図と地図地図
- 22. 地図上に図面を追加して街路をマップする
- 23. 地図3リスト
- 24. 地図内の地図java
- 25. 地図の移動でGoogleマップでマーカーを取得する
- 26. GoogleマップJavascript Api。地図マーカーinfoWindowディスプレイ
- 27. Googleマップ有料API静的地図
- 28. Googleマップ - 結果にOffcenter地図
- 29. 地図上に別の地図を表示できないリスナーイベント
- 30. 地図内のマップをjavascriptで実行しますか?
'' 'std :: set_difference'''を見てください。 –