Professional Documents
Culture Documents
სასრული განსაზღვრის
არის და მნიშვნელობათა სიმრავლის მქონე ფუნქციების რეალიზაცია
• Map-ის და Multimap-ის ძირითადი თვისებები და ფუნქციები
• ფუნქციების წარმოდგენა
• მაგალითები
• სავარჯიშოები
map<data type ,data type>map name multimap< data type ,data type >map name,
მონაცემის ტიპი შეიძლება იყოს ნებისმიერი: int, float, char, string,…
1
o map-ში გადატვირთულია [] და at ოპერატორები. [] ოპერატორის საშუალებით
შესაძლებელია ასახვის ელემენტის მნიშვნელობის შეცვლა.
o map-ის ელემენტები არ არის ინდექსირებული, მათზე წვდომა ხორციელდება
იტერატორის საშუალებით.
int main()
{
pair<int, string> p1(2,"tel" );
cout << get<0>(p1)<<" , "<<get<1>(p1)<<endl;
cout << p1.first << endl;
cout << p1.second << endl;
pair<char, float> p2;
p2 = make_pair('e', 3.7);
2
cout << p2.first << endl;
cout << p2.second << endl;
auto p3 = make_pair("pal", 8);
cout << get<0>(p3)<<" , "<<get<1>(p3)<<endl;
}
შედეგი:
2 , tel
tel
3.7
pal , 8
#include <iostream>
#include <map>
#include <string>
int main()
{
// m1 ასახვის შექმნა განაცხადით
map<int, string> m1{ { 5,"dato" },{ 7,"gia" },{ 0,"nino" } };
3
cout << endl;
cout << " map m1 after inserting: " << endl;
for (auto i = m1.begin(); i != m1.end(); i++)
cout << "(" << i->first << "," << i->second << ")";
cout << endl;
შედეგი:
map m1:
(0,nino)(5,dato)(7,gia)
(-1,keti)(0,nino)(2,vano)(4,ana)(5,dato)(7,gia)(77,rati)(88,soso)(100,tato)
(-1,keti)(0,nino)(2,vano)(4,ana)(5,dato)(7,gia)(77,rati)(88,soso)(100,tato)
int main()
{
// m1 ასახვის დალაგება გასაღების კლებადობის მიხედვით
map<string, int, greater<string>> m1{ { "dato", 95 },{ "gia",87 },{ "nino", 50 }};
4
// ძებნა ხდება გასაღების მიხედვით,იპოვის "dato"-ს შესაბამის წყვილს და აბრუნებს მის
იტერატორს,
//თუ არ არის ამ გასაღების შესაბამისი წყვილი, გამოიტანს შეცდომას.
auto it = m1.find("dato");
cout << endl;
cout << "dato's score is: " << (*it).second << endl;
// m1-ში, "dato" გასაღების მქონე წყვილს შეუცვლის მნიშვნელობას.
m1["dato"] = 100;
cout << endl;
cout << " map m1 after changing value of element with key dato: " << endl;
for (auto i = m1.begin(); i != m1.end(); i++) {
cout << "(" << i->first << "," << i->second << ")";
}
cout << endl;
cout << endl;
string sakheli = "ana";
// რადგან "ana" გასაღების მქონე წყვილი არ შედის ასახვაში, ამიტომ m1.find(sakheli)
აბრუნებს m1.end()-ს.
if (m1.find(sakheli) != m1.end())
cout << "the pair with key "<< sakheli<< " is found" << endl;
else
cout << "the pair with key "<< sakheli<< " is not found" << endl;
cout << endl;
// მნიშვნელობით
// შემდეგი ფრაგმენტი გამოიტანს 1-ს, თუ წყვილი გასაღებით "dato" წაიშალა ასახვიდან
და 0-ს, თუ წყვილი გასაღებით "dato" არ არის ასახვაში.
int erased_pair = m1.erase("nino");
cout << "is the pair erased ? " << erased_pair << endl;
cout << endl;
cout << "map m1 after erasing the element: " << endl;
for (auto it = m1.begin(); it != m1.end(); it++)
cout << "(" << it->first << "," << it->second << ")";
cout << endl;
5
map m1:
(nino,50)(gia,87)(dato,95)
(nino,50)(gia,87)(dato,100)
6
erase (a.find(x)) შლის x გასაღების მქონე მხოლოდ ერთ ელემენტს a
სიმრავლიდან.
count(x) აბრუნებს xგასაღების მქონე ელემენტების რაოდენობას
სიმრავლეში.
#include <iostream>
#include <map>
#include<functional>
int main()
{
// mm1 ასახვის შექმნა განაცხადით
multimap<int, char, greater<>> mm1{ { 5,'a' },{ 7,'s' },{ 0,'K' },{ 7,'z' },{
10,'s' } };
//multimap<int, char, greater<>> mm3;
cout << " multimap mm1: " << endl;
for (auto i = mm1.begin(); i != mm1.end(); i++)
cout << "(" << i->first << "," << i->second << ")";
cout << " map mm1 after inserting: " << endl;
for (auto i = mm1.begin(); i != mm1.end(); i++)
cout << "(" << i->first << "," << i->second << ")";
cout << endl;
7
//mm2 ასახვიდან იმ ელემენტების წაშლა, რომლის გასაღებიც 5-ზე ნაკლებია.
cout << "\n remove all elements up to element with key 5 in mm2: \n";
mm2.erase(mm2.begin(), mm2.find(5));
for (auto it = mm2.begin(); it != mm2.end(); ++it) {
cout << "(" << it->first << "," << it->second << ")";
}
8
multimap mm1:
(10,s)(7,s)(7,z)(5,a)(0,K)
(10,s)(7,s)(7,z)(7,m)(5,a)(4,4)(0,K)
(0,K)(4,4)(5,a)(7,s)(10,s)
(5,a)(7,s)(10,s)
(10,s)(5,a)(4,4)(0,K)
9
მაგალითი 4 /ასახვის ფუნქციების გამოყენებით შექმენით სასრულ სიმრავლეზე
განსაზღვრული ფუნქცია და გამოიტანეთ წყვილები
#include<iostream>
#include<set>
#include<map>
using namespace std;
int f(int x) {
return 4 * x - 7;
}
int main() {
set<int> s1{ -1,-2,-3,1,2,3,4,9,6,7,8,5 }, s2, s3;
map<int, int> m,m1;
for (auto i = s1.begin(); i != s1.end(); i++) {
y= f(*i);
m[*i] = y; m1.emplace(*i, y ); //ერთი და იგივე ასახვას ვქმნით ორი ხერხით
s2.insert(y);
}
cout << "m1 aris:" << endl;
for (auto it = m1.begin(); it != m1.end(); it++) {
10
m1 aris:
(-3,-19)(-2,-15)(-1,-11)(1,-3)(2,1)(3,5)(4,9)(5,13)(6,17)(7,21)(8,25)(9,29)
m aris:
-3 -19
-2 -15
-1 -11
1 -3
2 1
3 5
4 9
5 13
6 17
7 21
8 25
9 29
სავარჯიშოები
11 7 4 9 5 12 9 7 11 10 17 2
11
4. შექმენით map ასახვა, კლავიატურიდან შეყვანილი 10 წყვილისთვის. დაბეჭდეთ
მისი განსაზღვრის არე, ანასახების სიმრავლე. გაარკვიეთ, არის თუ არა ეს ასახვა
ფუნქცია და დაბეჭდეთ შესაბამისი გზავნილი.
12