青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

  關(guān)系數(shù)據(jù)庫,科學(xué)計(jì)算應(yīng)用以及基于Web的系統(tǒng)常常需要類似 vector 的容器,其索引可以是如何數(shù)據(jù)類型,不一定是整數(shù)。這樣的容器叫關(guān)聯(lián)容器,或者 map。例如,目錄服務(wù)應(yīng)用可以將私人姓名作為索引來存儲(chǔ),電話號(hào)碼作為其關(guān)聯(lián)的值:

directory["Harry"]=8225687;// 插入 "Harry" 并與他的電話號(hào)碼關(guān)聯(lián)
iterator it=directory.find("Harry");// 獲取 Harry 的電話號(hào)碼


  其它關(guān)聯(lián)容器的應(yīng)用還包括將 URLs 映射到 IP 的 DNS 服務(wù)器,字典,庫存清單,工資表等等。那么如何突破整型索引的局限,實(shí)現(xiàn)用其它數(shù)據(jù)類型作為索引的關(guān)聯(lián)容器呢?答案是:使用 <map> 庫創(chuàng)建和處理關(guān)聯(lián)容器。

Pair 和 Map
  最近的一篇文章中,我介紹了 tuple 的概念,它是不同類型元素的集合。在這篇文章中,有一個(gè)內(nèi)容沒有提到,那就是 C++98 標(biāo)準(zhǔn)庫已經(jīng)具備一個(gè)特殊的 tuple 類型——pair。它將鍵值(也就是第一個(gè)元素)與某個(gè)值(第二個(gè)值)關(guān)聯(lián)。例如:

#include <utility> //definition of pair
#include <string>
pair <string, string> prof_and_course("Jones", "Syntax");
pair <int, string> symbolic_const (0, "false");


標(biāo)準(zhǔn)庫還定義了一個(gè)輔助函數(shù),方便 pair 類型的創(chuàng)建:

string prof;
string course;
make_pair(prof,course);//returns pair <string,string>


第一步:構(gòu)造和初始化一個(gè) map 對(duì)象
  假設(shè)你正在開發(fā)一個(gè)地址簿程序,地址簿包含姓名和 e-mail 地址。類模板 map 在 <map> 中定義i,它是一個(gè)使用類型對(duì)的關(guān)聯(lián)容器,第一個(gè)元素是索引,第二個(gè)元素是關(guān)聯(lián)的值。使用方法如下:

#include <map>
map 
<stringstring> addresses;


為了添加元素,使用下標(biāo)算符:

addresses["Paul W."]="paul@mail.com";


  這里,串“Paul W.”是索引或鍵值,“paul@mail.com”是其關(guān)聯(lián)的值。如果該 map 已經(jīng)包含了此鍵值,那么當(dāng)前所關(guān)聯(lián)的值不會(huì)改變: 

addresses["Paul W."]= "newaddr@com.net"// 不起作用???我測(cè)試起作用



第二步:搜索
  在不插入元素的情況下,如果你想檢查某個(gè)元素是否存在,可以使用 find()成員函數(shù)。find()有兩個(gè)重載的版本:

iterator find(const key_type& k);
const_iterator find(
const key_type& k) const;



通常,用 typedef 可以使代碼更可讀一些:

typedef map <stringstring>::const_iterator CIT;
CIT cit
=addresses.find("Paul W.");
if (cit==addresses.end())
cout 
<< "sorry, no such key" << endl;
else
cout 
<< cit->first << ''\t'' << cit->second << endl;



表達(dá)式中 cit->first 和 cit->second 分別返回鍵值及其關(guān)聯(lián)的值。

第三步:元素遍歷
  現(xiàn)在讓我們看一個(gè)更現(xiàn)實(shí)的情況。假設(shè)你正在經(jīng)營一家旅行社,每一個(gè)代理做一單業(yè)務(wù)都可以獲得獎(jiǎng)金。這些代理的信息存儲(chǔ)在某個(gè)文件中,其格式如下:

Bob 35
Bob 90
Jane 80.25
Sue 100
Jane 65.5
  你的應(yīng)用程序必須匯總所有代理的獎(jiǎng)金并將每個(gè)代理的獎(jiǎng)金總數(shù)顯示出來.首先,創(chuàng)建一個(gè) map,然后讀取該數(shù)據(jù)文件:

 

map <stringdouble> bonuses;
string agent;
double bonus=0;
ifstream bonusfile(
"bonuses.dat");
if(!bonusfile)
{
// 報(bào)告出錯(cuò)信息并終止程序
}
while (bonusfile >> agent >> bonus)
{
bonuses[agent]
+=bonus;// 累加每個(gè)代理的獎(jiǎng)金
}


  不管理相不相信,就這么簡(jiǎn)單!且讓我們來分析一下該循環(huán)。打開數(shù)據(jù)文件之后,while 循環(huán)讀取每個(gè)值對(duì),并將其存入 agent 和 bouns 對(duì)象。接著,它將 agent 和 bouns 插入到該 map。此處的關(guān)鍵技巧是:如果鍵值(agent)已經(jīng)存在,那么 += 操作符便將最新讀取的 bouns 累加到存儲(chǔ)在 map 中當(dāng)前的 bouns 中。因?yàn)楸磉_(dá)式:

map[key]
  返回與鍵值關(guān)聯(lián)的值。當(dāng)重載的 += 操作符被調(diào)用時(shí),該值便被累加到新讀取的 bouns 中。最后累加的和覆蓋 map 中舊的關(guān)聯(lián)值。記?。寒?dāng)你使用下標(biāo)算符機(jī)制時(shí),純粹的賦值操作并不會(huì)改寫現(xiàn)有的值,只有重載的 += 才這么做。

幸運(yùn)的是,map 并不包含一個(gè)必須要初始化的鍵值,表達(dá)式:

map[key]
  返回默認(rèn)的初始化 T,而 T 在上述例子中是 double 類型。默認(rèn)的初始值為 0。至此,map 包含代理及其獎(jiǎng)金匯總值對(duì)。下面的循環(huán)用來顯示這些值對(duì),輸出如圖一所示:

 

for(CIT p=bonuses.begin(); p!=bonuses.end(); ++p)
{
cout << p->first <<''\t'' << p->second <<endl;
}

 


散列的關(guān)聯(lián)容器
  標(biāo)準(zhǔn)庫目前還不提供散列關(guān)聯(lián)容器。這種容器可以大大改進(jìn)性能,因?yàn)樗鼈兪褂蒙⒘兴惴◤脑瓉淼淖址饕缮替I值。但是,許多 IDEs 提供非標(biāo)準(zhǔn)散列容器擴(kuò)展。值得慶幸的是,新的 C++0X 標(biāo)準(zhǔn)彌補(bǔ)了這一點(diǎn),在 C++ 中添加了一組散列容器和與之相關(guān)的算法。


    //定義
    pair<intstring> ming(1,"ming1");
    map
<int ,string> authors;
    
//插入
    authors.insert(ming);
    authors.insert(map
<intstring>::value_type(2,"ming2"));
    authors.insert(make_pair(
3,"ming3"));
    
//修改
    cout << "before changed " << authors[3<< endl;
    authors[
3= "ming4";
    cout 
<<" after changed "  << authors[3<< endl;
    
//刪除
    cout <<" before erase "  << authors[2<< endl;
    map
<intstring>::iterator iter = authors.find(2);
    
if(iter != authors.end())
    {
        authors.erase(iter);
    }    
    cout 
<<" after changed "  << authors[2<< endl;

輸出:

before changed ming3
 after changed ming4
 before erase ming2
 after changed

    //刪除指針
    map<string, test4*> pointerMap;
    pointerMap.insert(make_pair(
"1"new test4()));
    std::map
<string, test4*>::iterator iter1;
     
for (iter1 = pointerMap.begin(); iter1 != pointerMap.end();++iter1)
     {
         delete  iter1
->second;
     }


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情视频在线| 国产精品久久久久aaaa| 欧美专区福利在线| 亚洲天堂视频在线观看| 在线日韩视频| 亚洲国产精品一区在线观看不卡| 国产乱码精品| 国产专区综合网| 91久久中文| 亚洲综合色噜噜狠狠| 亚洲欧美在线一区| 午夜精品区一区二区三| 亚洲欧美日韩一区在线| 久久精品中文字幕一区二区三区| 欧美一区二区三区免费看| 性欧美暴力猛交另类hd| 久久婷婷国产综合精品青草| 欧美成人日韩| 一区二区三区四区五区精品| 亚洲欧美国产不卡| 久久久一本精品99久久精品66| 免费久久99精品国产| 欧美日韩免费区域视频在线观看| 欧美在线www| 狠狠久久婷婷| 国产精品久久99| 黄色亚洲网站| 激情久久五月| 亚洲精品视频在线观看网站| 在线视频你懂得一区| 久久精品免视看| 亚洲电影免费在线观看| 亚洲午夜三级在线| 欧美jizzhd精品欧美巨大免费| 欧美精品性视频| 国产一区二区欧美| 一区二区三区欧美在线观看| 久久久久久久久久久一区| 亚洲片国产一区一级在线观看| 亚洲伊人伊色伊影伊综合网| 欧美99久久| 狠狠色狠狠色综合| 亚洲综合不卡| 欧美激情在线狂野欧美精品| 亚洲欧美国产一区二区三区| 欧美成人在线网站| 国产一区二区三区电影在线观看| 亚洲一级网站| 亚洲国产精品激情在线观看| 久久精品一二三| 国产日韩欧美二区| 午夜精品久久久久久久99水蜜桃| 亚洲激情视频在线播放| 久久久91精品国产| 国产一区二区中文| 久久er精品视频| 亚洲欧美中文字幕| 国产美女精品| 久久精品欧美日韩| 亚洲欧美国产高清va在线播| 欧美系列亚洲系列| 亚洲图片欧洲图片av| 亚洲乱码精品一二三四区日韩在线| 免费黄网站欧美| **网站欧美大片在线观看| 久久青草欧美一区二区三区| 亚洲无亚洲人成网站77777| 国产精品国产一区二区| 亚洲免费影视第一页| 日韩亚洲视频| 国产精品久久久一区二区三区| 亚洲天天影视| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美韩日一区二区| 正在播放欧美一区| 亚洲淫片在线视频| 国产一区二区成人久久免费影院| 久久久亚洲欧洲日产国码αv | 亚洲三级观看| 欧美成人午夜| 99riav久久精品riav| 亚洲三级观看| 国产精品久久久久久久9999| 午夜精品视频在线观看一区二区| 午夜一区不卡| 亚洲国内欧美| 免费观看成人www动漫视频| 亚洲精品中文在线| 一区二区av在线| 国产视频欧美| 欧美激情亚洲一区| 欧美三级视频在线观看| 欧美在线高清| 欧美 日韩 国产一区二区在线视频| 亚洲精品国产系列| 亚洲一区高清| 亚洲片在线资源| 亚洲综合成人婷婷小说| 亚洲国产精品免费| 亚洲一级一区| 在线免费日韩片| 亚洲午夜激情在线| 一区二区亚洲| 亚洲一区视频| 亚洲人体偷拍| 午夜免费久久久久| 在线视频精品一区| 久久一区二区三区av| 午夜精品999| 蜜桃伊人久久| 久久久美女艺术照精彩视频福利播放| 欧美成人第一页| 久久九九久久九九| 欧美涩涩视频| 亚洲第一偷拍| 黑丝一区二区三区| 亚洲伊人伊色伊影伊综合网| avtt综合网| 久久久久国产一区二区| 欧美一区亚洲一区| 国产精品第一页第二页第三页| 亚洲激情av| 亚洲国产成人精品久久| 午夜日本精品| 亚洲自拍偷拍一区| 欧美日韩中文字幕综合视频| 亚洲国产精品va在线看黑人| 91久久综合亚洲鲁鲁五月天| 久久久精品网| 久久综合久色欧美综合狠狠 | 性欧美1819性猛交| 亚洲欧美日韩一区| 欧美日韩在线直播| 亚洲精品五月天| 亚洲国产精品专区久久| 久久久www免费人成黑人精品| 欧美在线视频在线播放完整版免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美涩涩网站| 亚洲精品久久久久久久久久久久| 极品av少妇一区二区| 性色av一区二区三区在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美另类视频在线| 亚洲欧洲久久| 亚洲精品一区二区在线| 欧美激情视频给我| 亚洲免费成人av电影| 亚洲手机成人高清视频| 国产精品国产三级国产aⅴ入口| 99精品99久久久久久宅男| 一区二区三区视频在线| 欧美午夜无遮挡| 亚洲欧美中日韩| 蜜臀a∨国产成人精品| 最近中文字幕mv在线一区二区三区四区| 久久久国产亚洲精品| 男人的天堂亚洲| 日韩一级在线| 国产精品视频xxxx| 久久成人免费电影| 欧美国产亚洲精品久久久8v| 99精品视频免费全部在线| 国产精品黄视频| 欧美在线观看你懂的| 欧美高清视频一二三区| 亚洲午夜在线观看视频在线| 国产精品色网| 欧美99久久| 午夜亚洲性色视频| 亚洲国产精品小视频| 先锋影音久久久| 亚洲国产裸拍裸体视频在线观看乱了| 欧美片在线播放| 亚洲一区国产| 欧美激情一区二区三区在线视频观看 | 欧美激情免费在线| 亚洲午夜久久久久久尤物| 国产亚洲精品激情久久| 欧美成人免费在线| 午夜精品在线看| 亚洲精品美女在线观看播放| 久久久国产午夜精品| 一本久久精品一区二区| 狠狠88综合久久久久综合网| 欧美无乱码久久久免费午夜一区| 久久精品导航| 亚洲天堂第二页| 亚洲黑丝在线| 久久久噜噜噜久久| 亚洲女ⅴideoshd黑人| 亚洲成色www8888| 国产偷久久久精品专区| 欧美日韩精品免费在线观看视频| 午夜一区不卡| 一区二区三区蜜桃网| 最新亚洲视频| 欧美黄在线观看| 久久久久久久激情视频| 午夜国产欧美理论在线播放 |