programozas c++ list map

22
Korszerű programozási technikák gyakorlat list, map Pannon Egyetem, Számítástudomány Alkalmazása Tanszék 2010.09.30.

Upload: amarant6

Post on 08-Apr-2015

138 views

Category:

Documents


1 download

TRANSCRIPT

Korszerű programozási technikák

gyakorlat

list, map

Pannon Egyetem,Számítástudomány Alkalmazása Tanszék

2010.09.30.

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

2

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

3

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

4

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

5

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

6

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

7

Példa

Írjunk programot, mely osztályzatokat tárol egy list-ben.

Az adatokat 0-ig adjuk be. A bevitelt követően írassuk ki az

elemeket és számoljuk ki azok átlagát!

Írjuk ki, hogy milyen osztályzatok szerepeltek bevitelkor

(természetesen mindegyiket csak 1-szer)

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

8

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

9

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

10

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

11

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

12

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

13

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

14

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

15

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

16

Példa#include <iostream>

#include <string>

using namespace std;

int main(){

string s1(1,'a');//1 db a

string s2("szo");

string s3(s2);

cout<<"s1:"<<s1<<endl<<"s2:"<<s2<<endl<<"s3:"<<s3;

s1='b';

s2="word";

s3=s1;

cout<<"s1:"<<s1<<endl<<"s2:"<<s2<<endl<<"s3:"<<s3<<endl;

s1=s1+'2';

s2=s2+"word2";

s3=s3+s2;

cout<<"s1:"<<s1<<endl<<"s2:"<<s2<<endl<<"s3:"<<s3<<endl;

s3=s2[0];

s3+=s1[1];

cout<<"s1:"<<s1<<endl<<"s2:"<<s2<<endl<<"s3:"<<s3<<endl;

//at() (out_of_range), [] ...

return 0;

}

s1:a

s2:szo

s3:szo

s1:b

s2:word

s3:b

s1:b2

s2:wordword2

s3:bwordword2

s1:b2

s2:wordword2

s3:w2

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

17

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

18

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

19

map

Deklarációja:

map header-ben

std névtérben

map<kulcs,érték> osztálysablon segítségével

Feladata:

Olyan tároló, melyben kulcs alapján (tetszőlegesen rendezhető típus) a lehető leggyorsabban találjuk meg az értékeket.

Tároló létrehozása:

map<kulcs típusa, érték típusa>tároló

Például:

map<string, int>m;

Tároló bővítése (kulcs, érték) párral:

tároló[kulcs]=érték;

Például:

M[„Joe”]=13;

Megjegyzés:

Map a kulcsban egy értéket tárol, ha egy kulcs már létezik az =operátor az értéket felülírja

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

20

map Bejárás:

tároló.begin() .. (iterátor) .. tároló.end();

* iterator pair (kulcs, érték) pár típusú;

melynek .first mezője a kulcs

.second mezője az érték

Példa:

for(map<string,int>::iterator i=m.begin(); i!=m.end.();i++)

cout<<(*i).first<<’:’<<i->second<<endl;

Megjegyzés: *i = i->

Adott kulcsú elem értékének lekérdezése (referencia):

tároló[kulcs] //&érték

Példa:

m[„Joe”] //13

Elem törlése:

tároló.erase (iterator)

Elem iterátorának keresése kulcs szerint

tároló.find(kulcs)

Példa:

m.erase(m.find(„Joe”));

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

21

Példa#include <iostream>

#include <string>

#include <map>

using namespace std;

int main(){

map<string, int> m;

m["Joe"]=10;

m["Jack"]=5;

m["Mike"]=13;

for(map<string,int>::iteratori=m.begin();i!=m.end();i++)

cout<<i->first<<':'<<i->second<<'\n';

cout<<m["Mike"]<<endl;

m.erase(m.find("Joe"));

for(map<string,int>::iterator i=m.begin();i!=m.end();i++)

cout<<i->first<<':'<<i->second<<'\n';

return 0; }

Jack:5

Joe:10

Mike:13

13

Jack:5

Mike:13

Pannon Egyetem, Számítástudomány Alkalmazása Tanszék

22

Feladat

Írjunk programot C++ nyelven, mely neveket és

telefonszámokat olvas be (i/n) alapján.

A felvitelt követően adjon lehetőséget név szerinti keresésre.

Ha az adott név nem szerepel a felvitt adatok között fűzük

hozzá.

Esetleg

a program lehet menüvezérelt