Skip to main content

Posts

Функц

Функцийн тухай. Функцийг бид байнга ашигладаг. Векторт элемэнт нэмэх эсвэл тооны язгуурыг олох гэх мэт. Эдгээр функцууд нь өөрийн гэсэн сандээр байрладаг ба бид хүссэн үедээ ашиглаж болдог. Энэ удаад бид өөрсдөө хэрхэн функц зохиох талаар үзэх болно. Өөрсдөө функц бичих нь ямар ашигтай вэ? гэвэл кодыг илүү цэгцтэй мөн нэг бодсон зүйлийг олон дахин бичих шаардлагагүй болгодог. Бид өөрдсөө функцаа бичиж байгаа тул буцаах утга мөн авах утга мөн нэр гэх мэт зүйлсийг өөрөө зохион бичиж өгнө. Доорхи код  энэ  хаягдээр байгаа. Буцаах утгуудын хувьд int, long long, double, string, char эсвэл vector, массив ч байж болно. Харин тодорхой утга буцаах шаардлагагүй гэвэл void гэнэ. // функц    #include <iostream>    using   namespace  std;      void  plp(  int  a,  int  b ) {  // a -> b хүртэл хэвлэх функц  ...

Priority_queue

Priority queue-н тухай. Priority_queue гэдэг нь хамгийн их утгатай элемэнтийг хамгийн эхэнд нь хадгалдаг бүтэц. Энэ нь эрэмбэлдэг гэсэн үг биш. Ашигтай тал нь гэвэл элемэнт нэмэх, болон хамгийн их элемэнтийг устгахад log(N) үйлдэл хийнэ(2суурьтай үүнээс цааш сануулахгүй). Харин хамгийн их элемэнтийг мэдэхэд 1 үйлдэл юм. Доорхи код э нэ  хаяг дээр байгаа. push(утга) - утгыг нэмэх. (элемэнт нэмэх) pop() - хамгийн их элемэнтийг устгах. top() - хамгийн их элемэнтийн утгыг буцаана. size() - элемэнтийн хэмжээ. empty() - хоосон бол 1 үгүй бол 0 гэсэн утгыг буцаана. (True or False) // priority_queue    #include <iostream>    #include <queue> // priority_queue агуулж буй сан    using   namespace  std;      int  main() {        /*           priority_queue гэ...

Set

Set-н тухай. Set гэдэг нь элемэнтүүдийн эрэмбэлж хадгалдаг бүтэц юм. Элемэнт нэмэх, устгах гэх мэт үйлдлүүдийн LogN хугацаанд хийдэг мөн давхардлыг арилгадаг. Цаанаа өөр бүтэц ашигладаг тул бид 3-р элемэнтийг мэдэж чадахгүй юм. Харин iterator ашиглаж элемэнтүүдийг мэднэ. Доорхи код  энэ  хаягдээр байгаа. Доорхи бүх үйлдлийг Log(N) хугацаанд хийнэ(2суурьтай). Мөн хэрвээ давхардлыг арилгахгүй байлгамаар байгаа бол multiset ашиглах хэрэгтэй. Энэ нь адил утгатай элемэнт нэгээс олон удаа орж болно. Харин erase(утга) гэхэд өгөгдсөн утгатай тэнцүү утгатай бүх элемэнтүүд устах тул нэгийг л утгамаар байгаа бол it = s.find(утга); s.erase(it) гэдгийг ашиглаарай. insert(утга)-элемэнт нэмэх. erase(утга)-элемэнт устгах. lower_bound(утга)-өгөгдсөн утгаас их буюу тэнцүү хамгийн бага утгатай элемэнтийг буцаана upper_bound(утга)-өгөгдсөн утгаас эрс их хамгийн бага утгатай элемэнтийг буцаана хэрэв бүгд  бага бол end буюу хэмжээг буцаана // set-ын талаар үзэх...