シーケンスコンテナには、vector、deque、list、forward_list、array、stringが含まれ、すべてのシーケンスコンテナは、要素に順番にすばやくアクセスする機能を提供します。
連想コンテナには、セットとマップが含まれます
連想コンテナと順次コンテナには根本的な違いがあります。連想コンテナの要素は、キーワードによって格納およびアクセスされます。対照的に、シーケンシャルコンテナ内の要素は、コンテナ内の位置に従って順番に格納およびアクセスされます。
連想コンテナは、順次コンテナの位置に関連する操作をサポートしていません。その理由は、連想コンテナ内の要素はキーワードに従って格納されており、これらの操作は連想コンテナにとって意味がないためです。さらに、連想コンテナは、要素値および数量値操作を受け入れるコンストラクターまたは挿入操作をサポートしていません。
連想コンテナは、効率的なキーワード検索とアクセスをサポートします。連想コンテナの2つの主なタイプは、マップとセットです。マップ内の要素は、いくつかのキーと値(キーと値)のペアです。キーはインデックスとして機能し、値はインデックスに関連付けられたデータを表します。セット内の各要素には、キーワードが1つだけ含まれています。セットは効率的なキーワードクエリ操作をサポートします。特定のキーワードがセット内にあるかどうかを確認します。
標準ライブラリによって提供されるセットアソシアティブコンテナは、次のように分割されます。
1.要素をキーワード順に保存します。set(キーワードは値、つまりキーワードのみを保存するコンテナー)、multiset(繰り返しキーワードを含むセット)。
2.順序なしセット:unordered_set(ハッシュ関数で編成されたセット); unordered_multiset(ハッシュ関数で編成されたセット、キーワードを繰り返すことができます)。
セットは、キーワードの単純なコレクションです。値が存在するかどうかだけを知りたい場合は、setが最も役立ちます。
セット内の各要素の値は一意であり、システムは要素の値に従って自動的に並べ替えることができます。セット内の要素の値を直接変更することはできません。Setは、非常に効率的なバランスの取れた検索バイナリツリーを使用します。赤黒木。RBツリー(赤黒木)とも呼ばれます。RBツリーの統計的パフォーマンスは、一般的な平衡二分木よりも優れています。
セットの2つの特徴:
- セット内の要素はすべてソートされています
- セット内の要素はすべて一意であり、重複はありません
セットの使用法:
begin(); // 返回指向第一个元素的迭代器
end(); // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)
clear(); // 清除所有元素
count(); // 返回某个值元素的个数
empty(); // 如果集合为空,返回true
equal_range(); //返回集合中与给定值相等的上下限的两个迭代器
erase()–删除集合中的元素
find()–返回一个指向被查找到元素的迭代器
get_allocator()–返回集合的分配器
insert()–在集合中插入元素
lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()–返回一个用于元素间值比较的函数
max_size()–返回集合能容纳的元素的最大限值
rbegin()–返回指向集合中最后一个元素的反向迭代器
rend()–返回指向集合中第一个元素的反向迭代器
size()–集合中元素的数目
swap()–交换两个集合变量
upper_bound()–返回大于某个值元素的迭代器
value_comp()–返回一个用于比较元素间的值的函数
begin()およびend()
// set::begin/end
#include <iostream>
#include <set>
int main ()
{
int myints[] = {75,23,65,42,13};
std::set<int> myset (myints, myints+5);
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
myset contains: 13 23 42 65 75