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;
}