99 lines
2.5 KiB
C++
99 lines
2.5 KiB
C++
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <map>
|
|
#include <assert.h> /* assert */
|
|
|
|
using namespace std;
|
|
|
|
struct Oseba
|
|
{
|
|
string Ime;
|
|
string Priimek;
|
|
int IDUM; // 9-mestna unikatna številka
|
|
|
|
void print(){
|
|
cout << Ime << " " << Priimek << " " << to_string(IDUM) << "\n";
|
|
}
|
|
};
|
|
|
|
// prototipi
|
|
void dobi_prvo_crko(Oseba, char &);
|
|
void dobi_slovar_s_crko(map<char, map<int, Oseba>>, char, map<int, Oseba> &);
|
|
void vstavi_osebo_v_slovar_oseb(map<int, Oseba> &, Oseba);
|
|
void posodobi_slovar_oseb_v_slovarju(map<char, map<int, Oseba>> &, char, map<int, Oseba>);
|
|
void napolni_slovar(Oseba [], int, map<char, map<int, Oseba>> &);
|
|
|
|
void dobi_prvo_crko(Oseba oseba, char &prva_crka)
|
|
{
|
|
// TODO
|
|
prva_crka = oseba.Priimek[0];
|
|
}
|
|
|
|
void dobi_slovar_s_crko(map<char, map<int, Oseba>> slovar, char prva_crka, map<int, Oseba> &slovar_oseb)
|
|
{
|
|
// TODO
|
|
slovar_oseb = slovar[prva_crka];
|
|
}
|
|
|
|
void vstavi_osebo_v_slovar_oseb(map<int, Oseba> &slovar_oseb, Oseba os)
|
|
{
|
|
// TODO
|
|
slovar_oseb.insert(std::pair<int,Oseba>(os.IDUM, os));
|
|
}
|
|
|
|
void posodobi_slovar_oseb_v_slovarju(map<char, map<int, Oseba>> &slovar, char prva_crka, map<int, Oseba> slovar_oseb)
|
|
{
|
|
// TODO
|
|
slovar[prva_crka].swap(slovar_oseb);
|
|
}
|
|
|
|
void napolni_slovar(Oseba seznam[], int N, map<char, map<int, Oseba>> &slovar)
|
|
{
|
|
for (int i = 0; i < N; i++)
|
|
{
|
|
// pridobimo prvo črko
|
|
char prva_crka;
|
|
dobi_prvo_crko(seznam[i], prva_crka);
|
|
|
|
// pridobimo slovar oseb s prvo črko
|
|
map<int, Oseba> slovar_oseb;
|
|
dobi_slovar_s_crko(slovar, prva_crka, slovar_oseb);
|
|
|
|
// vstavimo osebo v slovar
|
|
vstavi_osebo_v_slovar_oseb(slovar_oseb, seznam[i]);
|
|
|
|
// posodobi slovar
|
|
posodobi_slovar_oseb_v_slovarju(slovar, prva_crka, slovar_oseb);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
Oseba seznam[] = {
|
|
Oseba {"Jani", "Dugonik", 123456789 },
|
|
Oseba{"Nikola", "Petrov", 1002525225},
|
|
Oseba{"Nikollll", "Petttr", 1223625123},
|
|
Oseba{"Ozan", "Zef",1001234567},
|
|
Oseba{"Zan", "Burger", 1002345678},
|
|
Oseba{"Marko", "Novak", 1003456789}
|
|
};
|
|
int N = sizeof(seznam) / sizeof(Oseba);
|
|
map<char, map<int, Oseba>> slovar;
|
|
napolni_slovar(seznam, N, slovar);
|
|
map<int,Oseba> slovarOseb;
|
|
Oseba tmp;
|
|
|
|
for (auto it=slovar.begin(); it!=slovar.end(); ++it) {
|
|
slovarOseb = it->second;
|
|
cout << it->first << endl;
|
|
for (auto at=slovarOseb.begin(); at!=slovarOseb.end(); ++at) {
|
|
at->second.print();
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|