セットは、すべての情報を提供することによってオブジェクトの情報を取得するために使用され、通常はデータが存在するかどうかを確認するために使用されます。マップは、キー (単一のデータ) を使用してオブジェクトの情報を取得するために使用されます。私が間違っている場合は修正してください。ここで問題は、そもそもなぜセットが必要なのかということです。データが存在するかどうかをマップで確認できないでしょうか? 存在するかどうかを確認するためだけに、なぜすべての情報を提供する必要があるのでしょうか?
3 に答える
Aは、それらの間で異なる (つまり、そうではない)set
同じアイテムをグループ化するのに役立ちます。たとえば、数字とはどちらもタイプですが、.type
equal
1
2
int
1!=2
set
コンテナーは、グループとして同種のもののコレクションを追跡し、そのようなグループに対して数学演算 (交差、和、差など) を実行する場合に役立ちます。たとえばset
、単語cat
および に言及しているすべてのドキュメントを含む検索結果の を想像してくださいdog
。そしてset
、単語に言及しているすべての文書を含む別の文書pet
。これらunion
2 つのセットの は、単語、、および を含むドキュメントのグループを提供cat
しdog
ますpet
。このようなグループには繰り返しがないことに注意してください (つまり、ドキュメントが最初に両方のセットにあった場合、2 番目のセットでは 1 回だけになります)。
maps
は間違いなくではありませんset
が、値を のすべての要素に関連付けることができる配置と見なすことができますset
。それらは関係を表すために使用されます。たとえばset
、会社で働いている人の には が関連付けられていemployee_number
ます。この場合、 amap
はそのような関係を表すのに便利な構造です。
前の例に戻ると、各ページがアクセスされた回数を知りたい場合は、おそらく の線に沿ってマップを作成できますstd::map<Page, int>
。つまり、ページ間の関係と、各ページが訪問された回数です。 .
マップのキーが a を形成することに注意してください(おそらくこれが多くの人々を混乱させる原因です)。このプロパティの意味は、指定されたキーは 1 回set
しか持てないということです(キーを異なる値にマップできる難解なコンテナーがいくつかあります)。けれど)。
したがって、グループやコレクション全体、およびグループ自体のメンバーと対話する必要がある場合は、おそらくset
. 特定のものをグループまたはコレクションのメンバーに関連付ける必要がある場合は、おそらくmap
. 関連付けが複数の次元にまたがる場合は、おそらくmulti_map
.
std::set
C++ ではとstd::map
が順序付けられていることに注意してください。C++11 には、 および と呼ばれる代替の順序付けされていないコンテナーが用意されています。std::unordered_set
std::unordered_map