ETH官方钱包

創作內容

0 GP

C++容器-關聯容器

作者:阿硯│2018-03-08 23:01:20│巴幣:0│人氣:140
HackMD
序列容器
小功能容器
關聯容器


用二元搜尋樹實作出來的,算是以set為主的類型
能用的功能有迭代器、內容修改,但並非和序列容器一樣


迭代器、反向迭代器
iterator begin(); // 傳回指向第一個元素的迭代器
iterator end();   // 傳回指向最後一個元素!!之後!!的迭代器

reverse_iterator rbegin(); // 傳回指向!!倒數!!第一個元素的迭代器
reverse_iterator rend();   // 傳回指向第一個元素!!之前!!的迭代器
內容修改 swap, clear, insert, erase
  • swap, clear
// 和另一個同類型的容器交換內容
void swap (container& x);

// 清空容器
void clear();
  • insert
// 在$position前插入值為$value的元素,但不一定會真的插在那個位置
// 回傳插入的位置,不一定是$position
// 如果位置選好的話,插入速度為常數
iterator insert (iterator position, Type value);

// 在容器內插入一排內容// 範圍是 [ $first , $last )
// InputIterator 可以是跟此容器相同或不同類別的迭代器,
// 但兩個容器儲存的類型要一樣
template <class InputIterator>  
void insert (InputIterator first, InputIterator last);

  • erase
// 刪除$position所指向的元素
// (C++11)回傳指向下一個元素的迭代器
void erase (iterator position);

// 刪除範圍是 [ $first , $last )的元素
// (C++11)回傳指向下一個元素的迭代器 (就是$last)
void erase (iterator first, iterator last);


set<Type>

離散數學教的集合,可以用來過濾重複元素,還會自動排序(大到小)。
為了符合集合的定義,它會自動將內部元素轉為const型態,以防止使用者亂修改。


// 在容器內找出指向 值為$value的元素 的迭代器,
// 若找不到回傳this.end()
iterator find (Type value);

// 在容器內找出 值為$value的元素 的數量。(1 or 0)
// 在set中沒什麼明顯作用
size_t   count(Type value);

// 在容器內插入一個值為$value的元素
// 若此元素插入前已存在,傳回 <該元素的位置    ,false>
// 若此元素插入前不存在,傳回 <插入後該元素的位置,true>
pair<iterator,bool> insert (Type value);

// 刪除與value相等的元素
// 回傳刪除的數量(1 or 0)
// 在set中沒什麼明顯作用
size_t erase (Type value);


map<Key, Value>

Type == <Key, Value>
離散數學教的函數,一對一、一對多
跟C#的dictionary差不多
它和set很像。 map<K,V> 大概等於 set<pair<K,V>>
內容元素 pair<K,V>,一對key-value


// 傳回 key==$k的元素的 value的參考
// 若無此元素,插入 pair($k,default) 到容器中
Value& operator[] (Key k);

// 傳回 指向key==$k的元素 的迭代器
// 若找不到回傳this.end()iterator find (Key k);
// 在容器內的key找出此元素的數量。
size_t   count(K key);

// 在容器內插入一個值為$p的元素
// 若此元素插入前已存在,傳回 <該元素的位置    ,false>
// 若此元素插入前不存在,傳回 <插入後該元素的位置,true>
pair<iterator,bool> insert (pair<K,V> p);

// 刪除key為$k的元素
// 回傳刪除的數量(1 or 0)
size_t erase (Key k);


multiset<Type>

跟set很像,差別在裡面的元素可以重複。
但它還是會自動將內部元素轉為const型態,以防止使用者亂修改。


// 在容器內找出指向 值為$value的元素 的第一個迭代器,
// 若找不到回傳this.end()
iterator find (Type value);

// 傳回所有 值為$value的元素 的迭代器
// 範圍 [pair.first , pair.second)
// 若找不到回傳this.end()
pair<iterator,iterator> equal_range (Type value);

// 在容器內找出 值為$value的元素 的數量。
size_t   count(Type value);

// 在容器內插入一個值為$value的元素
// 若已存在,在那個元素後面插入
iterator insert (Type value);

// 刪除與value相等的元素
// 回傳刪除的數量
size_t erase (Type value);


multimap<Key, Value>

跟map很像,差別在裡面的Key可以重複。
但它還是會自動將內部元素的Key轉為const型態,以防止使用者亂修改。


// 傳回 指向key==$k的元素 的第一個迭代器
// 若找不到回傳this.end()
iterator find (Key k);

// 傳回所有 指向key==$k的元素
// 範圍 [pair.first , pair.second)
// 若找不到回傳this.end()
pair<iterator,iterator> equal_range (Key k);

// 在容器內的key找出此元素的數量。
size_t   count(K key);

// 在容器內插入一個值為$p的元素
// 若已存在,在那個元素後面插入
iterator insert (pair<K,V> p);

// 刪除key為$k的元素
// 回傳刪除的數量
size_t erase (Key k);

引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=3913668
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:C++容器

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★kauhia 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:C++容器-小功能容器... 後一篇:畢業??...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】