找尋節點及其資料值:
(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為第二個迭代器,也就是上限。