close

按此前往C++完整教學目錄

 

 

找尋節點及其資料值

(1) 映射或複映射名稱.find(索引值);

可依照此索引值來找到相對應的節點,並且回傳此與此節點位址相對應的迭代器。注意:複映射也可以使用find()函數,但因複映射中一個索引值可能對應多個資料值,find()函數只能找到複映射中符合此索引值、而記憶位址最前面的節點,無法找到其他符合此索引值的節點,因此使用上需小心。範例:

class person

{

public:

string name;

int age;

person(string name_,int age_){

name=name_;age=age_;}

};

void show(person m)

{cout<<"我是"<<m.name<<",今年"<<m.age<<"歲。";}

 

int main(){  //主程式在此

person m1("維維",18);

person m2("小藍",19);

person m3("雅芯",24);

person m4("小杜",27);

person m5("木村靜香",17);

map<int,person> a;

a.insert(make_pair(85,m1));

a.insert(make_pair(90,m2));

a.insert(make_pair(77,m3));

a.insert(make_pair(82,m4));

a.insert(make_pair(77,m5));

 

show(a.find(85)->second);  //顯示:我是維維,今年18歲。

show(a.find(77)->second);  //顯示:我是雅芯,今年24歲。

}

(2) 映射或複映射名稱.equal_range(索引值);

可依照此索引值來找到相對應的節點,主要是針對複映射所用。會回傳一個成對結構,包含兩個迭代器,first為符合此索引值、而記憶位址最前面的節點之位址(稱為下限」,lower bound)second為符合此索引值、而記憶位址最後面的節點的下一個節點之位址(稱為上限」,upper bound)

例:

class person

{

public:

string name;

int age;

person(string name_,int age_){

name=name_;age=age_;}

};

void show(person m)

{ cout<<"我是"<<m.name<<",今年"<<m.age<<"歲。"<<endl;}

int main(){   //主程式在此

person m1("維維",18);

person m2("小藍",19);

person m3("雅芯",24);

person m4("小杜",27);

person m5("木村靜香",17);

 

multimap<int,person> ma;

multimap<int,person>::iterator i;

ma.insert(make_pair(85,m1));

ma.insert(make_pair(90,m2));

ma.insert(make_pair(77,m3));

ma.insert(make_pair(82,m4));

ma.insert(make_pair(77,m5));

 

for(i=ma.begin();i!=ma.end();i++)

{show(i->second);}

cout<<endl;

/* 顯示:

我是雅芯,今年24歲。

我是木村靜香,今年17歲。

我是小杜,今年27歲。

我是維維,今年18歲。

我是小藍,今年19歲。*/

 

show(ma.equal_range(77).first->second); //顯示:我是雅芯,今年24歲。

show(ma.equal_range(77).second->second); //顯示:我是小杜,今年27歲。

}

註:ma.equal_range(77).first為第一個迭代器,也就是下限ma.equal_range(77).second為第二個迭代器,也就是上限

 

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()