Для моего класса мне нужно найти использование следующей структуры: vector<map<int, map<char, float>>>
Моя идея состояла в том, чтобы создать базовый c метод шифрования, вывод которого зависит от даты использования (каждый день есть своя кодировка символов в течение года). Внешний map
из vector
представляет месяцы, а ключ int
этих карт представляет дни.
Конструкция использует файл , где каждая строка имеет В списке указано AB C, и каждой букве соответствует номер, разделенный точкой с запятой.
Мой код работает, но обеспечивает шифрование только для 1 числа каждого месяца, независимо от того, какую дату он получает. Оператор <<
работает нормально.
class CodeCollection{
vector<map<int, map<char, float>>> coding_of_the_day;
public:
CodeCollection(string path){
ifstream fin(path);
if(!fin.is_open()){
cerr << "Nope" << endl;
exit(432);
}
for(size_t j = 0; j < month_lenght.size(); ++j){
int day = 1;
map<int, map<char, float>> month;
for(int i = 0; i < month_lenght[j]; ++i){
map<char, float> char_value;
char c, tmp;
float f;
string abc_coding;
while(getline(fin, abc_coding)){
stringstream ss;
ss << abc_coding;
int counter = 1;
while(ss.good()){
ss >> c >> tmp >> f >> tmp;
char_value.emplace(c, f);
cout << c << f << " " << day << counter << endl;
counter++;
}
month.emplace(day, char_value);
day++;
}
}
coding_of_the_day.push_back(month);
}
fin.close();
}
friend ostream& operator<<(ostream& out, map<int, map<char, float>>& monthly){
for(auto const& first_key : monthly){
out << first_key.first;
for(auto const& second_key : first_key.second){
out << second_key.first << " = " << second_key.second << ", ";
}
out << endl;
}
return out;
}
ofstream codegenerator(string message, int month, int day){
ofstream fout("code.txt");
///I suppose my flaw is here:
map<int, map<char, float>>::iterator it = coding_of_the_day[month-1].find(day);
for(size_t i = 0; i < message.size(); ++i){
map<char, float>::iterator ite = it->second.find(message[i]);
fout << ite->second << ".";
}
return fout;
}
};
Заранее благодарим за любое решение.