Xem mẫu

  1. LẬP TRÌNH C/C++ NÂNG CAO Yêu cầu trước khi đọc: học xong Lập trình C/C++ căn bản BÀI 11 – ASSOCIATIVE CONTAINER (CÁC BỘ LƯU TRỮ LIÊN KẾT) Bao gồm map (ánh xạ) multimap (đa ánh xạ) set (tập hợp) multiset (đa tập hợp) Sự khác nhau giữa các associative container và sequential container ở một điểm: -các sequential container lưu trữ các phần tử (gọi là các value) và các value này được truy xuất tuần tự theo vị trí của chúng trong bộ lưu trữ -các associative container lưu trữ các phần tử (gọi là các value) và các khóa (gọi là các key) liên kết với các value và các value này được truy xuất theo các key mà chúng có liên kết Map CODE #include map ánh xạ từ một char* đến một int map mapInt; mapInt["one"] = 1; cout
  2. }; typedef map MP; typedef MP::iterator MPI; typedef MP::const_iterator MPCI; typedef MP::value_type MPVT; void display(const MP& mp) { for(MPCI i=mp.begin();i!=mp.end();++i) cout
  3. Dùng comparator để so sánh CODE class comparePerson { public: bool operator()(Person p1,Person p2){ return p1.name.compare(p2.name); } }; typedef map MAP; MAP pMap; Person p=new Person(...); MAP::iterator i=pMap.find(d); if(i==pMap.end()) pMap.insert(MAP::value_type(d,1)); Dùng comparator để sắp xếp CODE class comparePerson { public: bool operator()(const Person& p1,const Person& p2) { return p1.name.compare(p2.name); } }; typedef map MP; MP mapPerson;Person p("Viet"); mapPerson.insert(pair("one",Person("Nam"))); mapPerson.insert(pair("two",Person("Viet"))); mapPerson.insert(pair("three",Person("An"))); display(mapPerson); Bạn lưu ý là tất cả các asociative container đều có xây dựng sẵn comparator mặc định là less (trong thư viện functional)
  4. Nghĩa là khi bạn khai báo CODE map mapInt; thực ra là CODE map mapInt; Ví dụ CODE typedef map MI; typedef map::iterator MII; MI m;m["c"] = 1;m["b"] = 2;m["a"] = 3; for(MII i=m.begin();i!=m.end();++i) cout
  5. p.sort(AgeSort());//using sort with comparator for(LP::const_iterator i=p.begin();i!=p.end();++i) cout
  6. multiset multiset cũng giống set ngoại trừ một điều, mỗi key có thể ánh xạ đến nhiều hơn một value, nói cách khác là nhiều value trong multiset có chung một key Bạn có thể thắc mắc điều này chẳng có ý nghĩa gì, vì trong set thì key cũng chính là value, Không, chúng có khác đấy, thử xem nhé: CODE #include set s; s.insert(1); s.insert(1); for(set::iterator i=s.begin();i!=s.end();++i) cout
nguon tai.lieu . vn