Mt ban l mt chui cc cp, ni mt gi tr duy nht c kt hp vi mi kha duy nht
nh hnh. 14.6. Thu hi cc gi tr da trn phm v rt nhanh. Chng ta nn xc nh cha kha c c gi tr lin quan
Fig 14.5: Cp kha (gi tr) trong map. Map thng c gi l mt mng kt hp. iu quan trng l s dng ton t operator nh di y: phone [ John ] =1111 iu ny to ra mt mc nhp cho "John" v cc cng s (tc l gn ) gi tr t 1111 ti n . in thoi l mt i tng bn . Chng ta c th thay i gi tr , nu cn thit, nh sau: Phone[ John]=9999 iu ny thay i gi tr 1111-9999 . Chng ti cng c th chn v xa bt c ni no trong cp bn s dng Insert ( ) v xa ( ) chc nng . Hm thnh vin quan trng ca lp bn c lit k trong Bng 14.13 Table 14.12 Hm thnh vin quan trng ca lp map
Hm Nhim v begin() tham chiu n phn t u tin clear() Xa mi phn t t map Empty() Quyt nh map trng hay khng End() Cung cp cho mt tham chiu n cui map Erase() Xa phn t ch nh Find() Tm v tr ca phn t ch nh Insert() Chn phn t Size() a ra kch thc ca map Swap() Trao i cc yu t ca bn nht nh vi nhng cch gi bn
Chng trnh 14.13 cho thy mt v d n gin ca mt bn c s dng nh mt mng kt hp. Lu rng tiu <map> phi c bao gm.
HIDEN
HIDEN
Chc nng i tng thng c s dng nh l i s nht nh v cc thut ton. V d, bo co Sort(array, array+5, greater<int>()); s dng hm greater<int>() sp xp cc phn t trong mng theo th t gim dn Ngoi so snh, STL cn cung cp nhiu hm khc thc hin cc hot ng s hc hay logic nh trong bn 14.14. Mun s dng cc hm, phi c cu lnh include<functional> header file Bng 14.14 Hm Loi M t Divide<T> S hc x/y Equal_to<T> Quan h x==y Greater<T> Quan h x>y Greater_equal<T> Quan h x>=y Less<T> Quan h x<y Less_equal<T> Quan h x<=y Logical_and<T> logic x&&y Logical<not> logic !x Logical<or> logic x||y Minus<T> S hc x-y Modulus<T> S hc x%y Negate<T> S hc -x Not_equal_to<T> Quan h x!=y Plus<T> S hc x+y Multiplies<T> S hc x*y
Ch : Bin x,y trong class T s c thay bi cc i s tng ng Chng trnh 14.4 s dng hm greater<>() sp xp: #include<iostream> #include<algorithm> #include<functional> using namespace std; int main() { int x[]={10,50,30,40,20); int y[]={70,90,60,80}; sort(x,x+5,greater<int>()); sort(y,y+4); for(int i=0;i<5;i++) cout<<x[i]<< ; cout<<\n; for(int j=0;j<4;j++) cout<<y[j];<< ; cout<<\n; int z[9]; merge(x,x+5,y,y+4,z); for(i=0;i<9;i++) cout<<z[i[<< ; cout<<\n; return(0); }
Output: 50 40 30 20 10 60 70 80 90 50 40 30 20 10 60 70 80 90 Ch : Chng trnh to ra hai mng x v y v khi to chng vi gi tr quy nh Chng trnh sau sp xp c hai bng cch s dng thut ton sort(). Lu rng x c sp xp bng cch s dng hm greater<int>() v y c sp xp m khng c n v do x l trong th t gim dn. Cui cng chng trnh kt hp c hai mng v hin th ni dung ca mng sp nhp. Lu cc dng ca hm merge0 v kt qu. TM LI Tp hp chung cc lp v hm gi l th vin th vin khun mu chun (STL). STL l mt thnh phn ca th vin chun C++ STL bao gm 3 thnh phn: containers (thng), algorithms (thut ton), and iterators (vng lp). Container l i tng cha d liu ca cng loi. Container c chia thnh ba loi chnh: tun t, kt hp, v ngun gc.
HIDEN
Review Question 14.1 STL l g? N khc vi th vin chun ca C++ nh no? Ti sao n quan trng trong lp trnh? 14.2 Lit k ba loi container. 14.3 S khc bit ln gia mt container trnh t v mt lin kt l g container? 14,4 tnh hung tt nht cho vic s dng cc thng cha chui l g? 14,5 tnh hung tt nht cho vic s dng cc thng cha lin kt l g? 14.6 Mt iterator l g? c im ca n l g? 14,7 Thut ton l g? Lm th no cc thut ton STL khc vi cc thut ton thng thng? 14.8 Lm th no c cc thut ton STL thc hin? 14.9 Phn bit gia nhng iu sau y : (a) lists and vectors (b) sets and maps (c) maps and multimaps (d) queue and deque (e) arrays and vectors 14.10 So snh cc c tnh hiu sut ca ba container th t. 14.11 ngh thng cha thch hp cho cc ng dng sau : (a) Chn mt sau ca mt container. (b) chn thng xuyn v xa c hai u ca mt container. (c) chn thng xuyn v xa b gia mt container. (d) thng xuyn truy cp ngu nhin ca cc yu t . 14.12 ng hay sai . ( a) lp l mt hnh thc tng qut ca con tr. (b) Mt mc ch ca mt iterator l kt ni cc thut ton container. (c) cc thut ton STL l cc hm thnh vin ca container. (d) Cc kch thc ca mt vector khng thay i khi thnh phn ca n c loi b. ( e) thut ton STL c th c s dng vi mng c - nh th no. (f) Mt lp lun lun c th di chuyn qua li thng qua mt container. (g) Hm thnh vin end( ) tr v mt tham chiu n phn t cui cng trong container. (h) Hm thnh vin back( ) loi b cc yu t mt sau ca container. (i) sort() i hi mt iterator truy cp ngu nhin . (j) Mt map c th c hai hoc nhiu hn cc yu t c gi tr quan trng nh nhau
Bi tp sa li: 14.1 Xc nh li trong chng trnh sau y #include <iostream.h> #include <vector> #define NAMESIZE 40 using namespace std; class EmployeeMaster { private: char namefNAMESIZE]; int id; public: EmployeeMaster() { strcpy(name, "); id = 0; } EmployeeMaster(char name[NAMESIZE], int id) :id(1d) { strcpy(this->name, name); } EmployeeMaster* getValuesFromuser() { EmployeeMaster*temp=new ErrployeeMaster(); cout<<endl<< "Enter user name : "; cin>>temp->name; cout<<endl<<"Enter user ID : "; cin>>temp->id; return temp; void displayRecord() { cout endl "Name : ' name; cout endl "ID : " id endl; ) void main() { vector <EmployeeMaster*> emp; EmployeeMaster *temp = new EmployeeMaster(); emp.push_back(getValuesFromUser()); emp[0]->displayRecord(); delete temp; temp=new EmployeeMaster('AlanKay", 3); emp.push_back(temp); emp[emp.capacity()]->displayRecord(); emp[emp.size()]->displayRecord(); }
14.2 Xc nh li trong chng trnh sau y
#include <iostream> #include <vector> using namespace std; int main() { vector <int> v1; vl.push_back(10); vl.push_back(30); vector <int> v2; v2.push_back(20); v2.push_back(40); if(vl==v2) cout"vectors are equal"; else cout"vectors are unequal\t"; vl.swap(20); for(int y=0; y<vl.s1ze(); y++) { coutvl=vl[y]" ; cout"v2="v2[y] ; } return 0; } 14.3 Identify the error in the following program. #include<iostream> #include<list> void main() { list <1nt> 11; U.push_front(10); 1l.push_back(20); U.push_front(30); 1l.push_front(40); U.pushback(lO); 1l.pop_front(40): 11.reverse(); 1l.unique(); }
Cc bi tp lp trnh: 14.1 Vit mt on m sau y : (a) nh ngha mt vector v vi kch c ti a l 10 (b) Thit lp cc yu t u tin ca v l 0 (c) Thit lp phn t cui cng ca v l 9 (d) Thit lp cc yu t khc l 1 (e) Hin th cc ni dung ca v 14.2 Vit chng trnh s dng thut ton find() xc nh v tr ca mt gia tr trong th t container 14.3 Vit chng trnh bng cch s dng thut ton count() m c bao nhiu phn t trong mt container c gi tr xc nh . 14.4 To mt mng vi s chn v mt danh sch vi s l. hp nht hai trnh t ca cc s vo mt vector bng cch s dng thut ton merge(). Hin th vector. 14.5 To mt lp sinh vin bao gm tn hc sinh v m sinh vin. To nm i tng ca lp ny v lu tr chng trong mt danh sch to mt phone_lit. Vit mt chng trnh s dng danh sch ny hin th tn sinh vin nu m sinh vin c a ra v ngc li. 14.6 Lm li bi tp 14.17 s dng 1 b. 14.7 Mt bng cho mt danh sch cc mu xe v s lng cc n v bn ra mi loi trong mt thi gian quy nh. Vit mt chng trnh lu tr bng ny trong mt container ph hp, hin th tng tc tng gi tr ca mt m hnh bn, a ra gi ca m hnh . 14.8 Vit chng trnh chp nhn mt danh sch mua sm ca nm mt hng t bn phm v lu tr chng trong mt vector. M rng chng trnh thc hin nhng iu sau y: (a) xa mt mc quy nh trong danh sch (b) thm mt mc ti mt a im quy nh (c) thm mt mc vo cui (d) in cc ni dung ca vector