エディタ:[C ++ STL]を設定し、多重集合- memsetの-ブログパーク
https://www.cnblogs.com/ChinaHook/p/6985444.html
(フォントがわずかに変更されました)
1、構造
セットと多重集合の要素は、特定の並べ替え原理に従ってソートされます。両者の違いという点で、可能多重集合は要素を繰り返し、セットは一意でなければなりません。
限り、割り当て、コピー可能、(いくつかの順序付け基準に従って)に匹敵が入力されたTとして、あなたは、要素またはマルチセットのセットになることができます。特に注文原理は、以下のデフォルトを使用しない場合は、<演算子を持っているの並べ替えを完了するために、要素を比較します。
ソート基準は、以下の原則を遵守しなければなりません。
-
"反対称"でなければならX <Yをy <xがfalseで、trueの場合、<演算子のために。
-
「転送」されなければならないオペレータに対して<X <Yが真である場合、Y <Zは、その後、X <Zも真で、真です。
-
X <X常に偽である、という点で<演算子の「非再帰」でなければなりません。
2、容量
そのような標準、セットおよびマルチセットなどの関連する容器の全ては、一般に、平衡二分木を完成します。
主な利点は、自動仕分けバイナリツリーの探索要素は、良好なパフォーマンス、その探索アルゴリズムのいくつかの機能を有するの複雑性を有する可能にすることです。それは要素の値を変更するには、既成の秩序を混乱させるだろうので、しかし、自動ソートはまた、要素の値を直接変更することはできないという制限を作成するには、最初に、新しい要素を挿入し、古い要素を削除する必要があります。だから、セットとマルチセットは、次の特性があります。
-
操作要素は、要素への直接アクセスを提供していません。
-
イテレータの要素を介してアクセス。
図3に示すように、操作機能
3.1の構成、コピー、デストラクタ
オペレーティング |
効果 |
セット C |
空のセット/多重集合を生成し、任意の要素が含まれていません |
Cセット(上) |
オペアンプは、基準をソートすることで、空のセット/多重集合を生成し、 |
セットC1(C2) |
コピーされたすべての要素のセット/マルチセットのコピーを作成 |
集合C(BEG、終了) |
セット/多重集合を生成する区間[BEG、エンド内のすべての要素)に |
集合C(BEG、終了、OP) |
OPは、基準、区間[BEGの要素、エンド)セット/多重集合を生成するソートします |
C。〜セット() |
空きメモリのすべての要素を破壊します |
セット<Elemの> |
(演算子<)順序の基準に、セットしているの生成 |
セット<Elemの、0P> |
OPへ順にランク付け基準として、セットを生成します |
3.2非変更操作
オペレーティング |
効果 |
c.size() |
要素の現在の数を返します。 |
c.empty() |
0 ==サイズに等しいゼロの大きさ、()、より効率的かどうかを決定します |
c.max_size() |
これは、要素の最大数を保持することができる返します |
C1、C2 == |
C1 C2とを分析することに等しく、 |
C1!= C2 |
(に相当!(C1の==のC2))C1 C2に等しいか否かを判定する |
C1 <C2 |
C1 C2とを分析することよりも小さくなっています |
C1> C2 |
C2はC1よりも大きいか否かを決定します |
C1 <= C2 |
(!(C2 <C1)に相当)以下のC1、C2かどうかを判断します |
C1> = C2 |
(に相当!(C1 <C2))かどうか以上のC1、C2を決定します |
3.3特殊な検索機能
要素内のセットやマルチセットは、設計最適化されたクイック検索を行って、特殊な検索機能を提供しますので、これらはむしろ、STLの線形複雑度よりも、複雑さの数で利用できる、検索機能を使用するために優先順位を与えられるべきです。平均線形複雑度が500時間を必要としながら、例えば、1000において検索要素、対数複雑さは、10回の平均です。
オペレーティング |
効果 |
カウント(ELEM) |
要素値elemは数を返します。 |
見つける(ELEM) |
なしEND IF()、第1要素ELEMの要素の値を返します |
下部_bound(ELEM) |
ELEMの最初の戻り要素値ELEMの配置位置、すなわち、要素値> =第1の要素の位置 |
上部_bound(ELEM) |
すなわち、要素値>第一要素のELEM位置は、要素の値が最後ELEM位置に配置することができる返します |
equal_range (elem) |
返回elem可安插的第一个位置和最后一个位置,也就是元素值==elem的区间 |
3.4 赋值
操作 |
效果 |
c1 = c2 |
将c2的元素全部给c1 |
c1.swap(c2) |
将c1和c2 的元素互换 |
swap(c1,c2) |
同上,全局函数 |
3.5 迭代器相关函数
sets和multisets的迭代器是双向迭代器,对迭代器操作而言,所有的元素都被视为常数,可以确保你不会人为改变元素值,从而打乱既定顺序,所以无法调用变动性算法,如remove()。
操作 |
效果 |
c.begin() |
返回一个随机存取迭代器,指向第一个元素 |
c.end() |
返回一个随机存取迭代器,指向最后一个元素的下一个位置 |
c.rbegin() |
返回一个逆向迭代器,指向逆向迭代的第一个元素 |
c.rend() |
返回一个逆向迭代器,指向逆向迭代的最后一个元素的下一个位置 |
3.6 安插和删除元素
必须保证参数有效,迭代器必须指向有效位置,序列起点不能位于终点之后,不能从空容器删除元素。
操作 |
效果 |
c.insert(elem) |
插入一个elem副本,返回新元素位置,无论插入成功与否。 |
c.insert(pos, elem) |
安插一个elem元素副本,返回新元素位置,pos为收索起点,提升插入速度。 |
c.insert(beg,end) |
将区间[beg,end)所有的元素安插到c,无返回值。 |
c.erase(elem) |
删除与elem相等的所有元素,返回被移除的元素个数。 |
c.erase(pos) |
移除迭代器pos所指位置元素,无返回值。 |
c.erase(beg,end) |
移除区间[beg,end)所有元素,无返回值。 |
c.clear() |
移除所有元素,将容器清空 |