• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-4  評論-40  文章-117  trackbacks-0

            STL概覽-關(guān)聯(lián)容器set,multiset,map,multimap


            關(guān)聯(lián)式容器associative container:被插入的元素并沒有一個(gè)固定的位置。這不僅是指操作者可能更改其中元素的位置,還有可能——每當(dāng)新插入一個(gè)元素時(shí),容器都會(huì)自動(dòng)的按照某種排序規(guī)則將新來的元素放置在合適的位置。也即,這種容器內(nèi)元素的排列順序由容器自己的排序規(guī)則決定,操作者無能為力。

             

            ==============================================================

            Set(multiset)

            |

            |->名稱----->set

            |->個(gè)性

            |      |------> set的底層實(shí)現(xiàn)是基于平衡二叉樹的(當(dāng)然標(biāo)準(zhǔn)書中并沒有這么規(guī)定)

            |      |------> 由于關(guān)聯(lián)式容器是順序的,那么set就不允許對其中的元素作直接的修改,否則所謂    |      |              的關(guān)聯(lián)式將不再關(guān)聯(lián)——容器中的元素已經(jīng)不再符合某種順序了。

            |      |------> set的排序規(guī)則有兩種確定方式,一是采用模板參數(shù),一是采用構(gòu)造參數(shù)。前者使得排|    |          序規(guī)則成為set類型的一部分(在對整個(gè)容器作比較等運(yùn)算的時(shí)候,這個(gè)是比需的);|    |         后者僅在構(gòu)造一個(gè)實(shí)例對像的時(shí)候用到,但其類型不會(huì)改變(雖然排序規(guī)則發(fā)生了變  |    |         化),此處的排序規(guī)則通常比模板參數(shù)中的規(guī)則具有更高的優(yōu)先級。

            |      |------> 由于STL基本上采用的是reference語義,故要求其元素必須具備                       |      |             assignable,copyable,comparable

            |

            |->陷阱

            |      |------> inserterase的參數(shù)類型不一樣的時(shí)候其返回的類型也是不一樣的。對于set而言,  |      |              insert(value)會(huì)返回一個(gè)pair(pos,bool),而insert(pos)則同樣返回一個(gè)iterator|      |              poserase(value)會(huì)返回被刪除元素的個(gè)數(shù),而erase(pos)則不會(huì)返回任何東西,|    |          它實(shí)際上是一個(gè)過程式的成員函數(shù)。

            |      |------> 兩個(gè)set容器的比較是按照字典的方式進(jìn)行的。但一定要注意,比較的兩個(gè)set容器必  |               須要具有相同的類型,特別是在模板參數(shù)中給出了排序規(guī)則參數(shù)的時(shí)候,就得注意這  |               些參數(shù)是否一致——該參數(shù)同樣決定著你所用的set的類型。

            |

            |->說明----->multisetset的用法基本一樣,不同的是它允許出現(xiàn)相同的值得元素。

            |

            |->Type----->class

            |->Include---><set>

            |->Define---->set<class T,optional compare,optional>

            |->Sub

            |      |------>constructor

            |                      |->default,copy,assignmet

            |->Fun

                   |------>NoModify operate

                   |               |->.size() .max_size() .empty() (各種compare operator)

                   |------>seek operator

                   |               |->.count(elem) .find(elem) .lower_bound(elem) .upper_bound(elem)

                   |                    .equal_range(elem)

                   |------>iterator

                   |               |->.begin() .end() .rbegin() .rend()

                   |------>add&del

                                   |->.insert(elem) .insert(pos,elem) .insert(beg,end)

                                   |->.erase(elem) .erase(pos) .erase(beg,end) .clear()

             

             

            ==============================================================

            Map(mulitmap)

            |

            |->名稱----->map

            |->個(gè)性

            |      |------> mapset的最大區(qū)別在于map是一種特殊的set,它的所有元素都是pair<key,value>

            |      |------> map最大的特性在于map提供了下標(biāo)subscript操作的能力,你可以向數(shù)組一樣操作  |      |              map[key]來引用相應(yīng)的值。這個(gè)除了方便以外同樣也是問題的根源。

            |      |------> 幾乎所有針對map的操作都是基于key的。比如,排序就是通過比較key來進(jìn)行的。

            |      |------> 對于set成立的操作在map中基本上都成立

            |

            |->陷阱

            |      |------> 如果你采用了這樣的語句erase(pos)——其中的pos是個(gè)iterator,那么最好不要在 |    |        對該pos最任何操作,應(yīng)為erase(pos)已經(jīng)將這個(gè)pos刪除了,此后任何關(guān)于pos的操作|    |        都視為定義的。這種情況要是發(fā)生在for循環(huán)中,for(pos=.begin(),pos!=.end         |      |           (),pos++)能解決問題了。

            |      |------> 假設(shè)代碼中有這樣的語句,cout<<map[key],按理這是沒有問題的,但是如果你的 |      |            keymap中原本是不存在的,那么這句代碼會(huì)“自作聰明”的幫你在map中將上一個(gè)  |    |         該keyvaluedefault的元素,這恐怕不是件好事。

            |      |------> map[key]=value的操作要比insert(value)的方式慢。

            |

            |->說明------>multimap的操作與map大致一樣,不同在于multimap允許有相同的key在容器中存在。

            |

            |->Type----->class

            |->Include---><map>

            |->Define---->map<key,value,optional compare ,optional>

            |->Sub

            |->Fun

                   |------>mapset基本具有相同的操作。

                   |------> 不同的是mapinsert(elem)不再返回一個(gè)pair而是一個(gè)pos的iterator 



            posted on 2009-03-12 15:52 李陽 閱讀(1510) 評論(0)  編輯 收藏 引用 所屬分類: C++
            久久青草国产精品一区| 漂亮人妻被中出中文字幕久久| 亚洲国产精品成人久久蜜臀 | 欧美va久久久噜噜噜久久| 欧美激情精品久久久久久久九九九| 久久香蕉国产线看观看99| 久久免费线看线看| 91久久精品视频| 久久精品国产99久久久香蕉| 国产精品无码久久四虎| 久久99精品久久久久久噜噜| 久久国产乱子伦精品免费午夜| 中文字幕一区二区三区久久网站| 一本久久a久久精品综合夜夜| 18岁日韩内射颜射午夜久久成人| 久久国产精品久久国产精品| 久久精品国产亚洲一区二区| 婷婷久久综合九色综合98| 久久精品18| 亚洲伊人久久精品影院| 久久精品国产亚洲AV麻豆网站 | 久久香蕉超碰97国产精品 | 久久免费国产精品一区二区| 亚洲国产精品久久久久婷婷老年| 精品国产婷婷久久久| 亚洲人成电影网站久久| 日产精品久久久一区二区| 97久久综合精品久久久综合| 久久福利片| 色8久久人人97超碰香蕉987| 91久久九九无码成人网站| 狠狠色婷婷久久一区二区| 青青国产成人久久91网| 97精品伊人久久大香线蕉| …久久精品99久久香蕉国产 | 乱亲女H秽乱长久久久| 久久精品无码一区二区三区日韩| 色婷婷综合久久久久中文一区二区| 一本久久a久久精品综合夜夜| 亚洲精品美女久久777777| 国产精品热久久无码av|