Map нь түлхүүрийн утга (key value) болон түүнд харгалзах утга(mapped value)-ыг хослуулсан хэлбэртэй элементүүдийг агуулагч төрөл юм.
Key value нь элементүүдийг бие биенээс ялгаж байдаг бөгөөд утга нь давхардаж болохгүй. Key value, mapped value 2-ын авах утгын төрөл нь ялгаатай байж болно. Маш энгийн жишээ дурдъя. Ашиглагдаж байгаа гар утасны дугаар болгон эзэнтэй, мөн дугаар давхарддагүй гэдгээс дугаарыг key value, эзмшигчийн нэр(мэдээлэл)-ийг maped value болгон харгалзуулж болно. Map-ийг дараах хэлбэртэйгээр зарлана:
map<түлхүүр утгын төрөл, харгалзах утгын төрөл> нэр; Ж. map <int, string> mobile;
Key value, mapped value-ийн хосолсон утгыг хамтад нь
iterator гэж нэрийдэнэ. Iterator-ийг
map<түлхүүр утгын төрөл, харгалзах утгын төрөл>::iterator итераторийн_нэр; гэж зарлана. Итераторын түлхүүр утгыг
итераторын_нэр -> first, харгалзах утгыг итераторын_нэр -> second гэж авна.
Гишүүн функцүүд:
1. begin(): map-ийн эхний итераторын утгыг буцаана.
2. clear(): map-ыг цэвэрлэнэ (бүх утгыг устгана).
3. count(): map-д тухайн key бүхий элемент байгаа эсэхийг тодорхойлно. Байвал 1, байхгүй бол 0 гэсэн утга буцаана.
4. empty(): map хоосон эсэхийг тодорхойлно.
5. end(): map-ийн сүүлчийн итераторын утгыг буцаана.
6. erase(): map-аас өгөгдсөн key-тэй итераторыг устгана.
7. find(): өгөгдсөн key-тэй итератор map-д байгаа эсэхийг тодорхойлж, байвал тухайн key бүхий итераторыг буцаана.
8. insert(): map-д итератор нэмнэ.
9. max_size() : map-д байж болох итераторын хамгийн их тоог буцаана.
10. size(): map-д байгаа итераторын тоог буцаана.
Жишээнүүд
// map::begin/end
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;
// show content:
for ( it=mymap.begin() ; it != mymap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;
return 0;
}
// map::find
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
mymap['a']=50;
mymap['b']=100;
mymap['c']=150;
mymap['d']=200;
it=mymap.find('b');
mymap.erase (it);
mymap.erase (mymap.find('d'));
// print content:
cout << "elements in mymap:" << endl;
cout << "a => " << mymap.find('a')->second << endl;
cout << "c => " << mymap.find('c')->second << endl;
return 0;
}
// map::insert
#include <iostream>
#include <map>
using namespace std;
int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
pair<map<char,int>::iterator,bool> ret;
// first insert function version (single parameter):
mymap.insert ( pair<char,int>('a',100) );
mymap.insert ( pair<char,int>('z',200) );
ret=mymap.insert (pair<char,int>('z',500) );
if (ret.second==false)
{
cout << "element 'z' already existed";
cout << " with a value of " << ret.first->second << endl;
}
// second insert function version (with hint position):
it=mymap.begin();
mymap.insert (it, pair<char,int>('b',300)); // max efficiency inserting
mymap.insert (it, pair<char,int>('c',400)); // no max efficiency inserting
// third insert function version (range insertion):
map<char,int> anothermap;
anothermap.insert(mymap.begin(),mymap.find('c'));
// showing contents:
cout << "mymap contains:\n";
for ( it=mymap.begin() ; it != mymap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;
cout << "anothermap contains:\n";
for ( it=anothermap.begin() ; it != anothermap.end(); it++ )
cout << (*it).first << " => " << (*it).second << endl;
return 0;
}