Очень нужна помощь в переводе с Python на С++.
Помогите разобраться!!!
вот исходный код на Python
def avg_freq_from_files(fnames):
assert(len(fnames))
freqs = [count_freq_for_str(open(i).read()) for i in fnames]
cmn_keys = set(freqs[0].keys())
for i in freqs[1:]:
cmn_keys = cmn_keys.intersection(set(i.keys()))
def avg_fr(n):
return avg([i[n] for i in freqs])
freq = dict((k, avg_fr(k)) for k in cmn_keys)
return freq
На выходе map<int, double>
то что получается в C++
const std::map<int, double> avg_freq_from_files(std::vector<string> &fnames)
{
std::map<int, double> freq, f1;
std::vector< std::map<int,double> > freqs;
std::set<int> cmn_keys, cmn_keys1;
std::vector<string> words;
size_t i;
string str;
char s;
string word;
if (fnames.size() == 0)
exit(1);
for (i=0; i<fnames.size(); i++)
{
ifstream input_file(fnames[i].c_str(), ifstream::in );
while (! input_file.eof())
{
s = input_file.get();
if ((s>='a' && s<='z')||(s>='A' && s<='Z'))
{
word += s;
}
else
{
if (word.size() != 0)
{
f1 = count_freq_for_str<int>(word);
freqs.push_back(f1);
}
word.clear();
}
}
input_file.close();
}
cmn_keys = get_keys(freqs[0]);
//?????
for(i=1; i<freqs.size(); i++)
{
std::set<int> cmn_keys2;
cmn_keys1 = get_keys(freqs[i]);
set_intersection(cmn_keys.begin(), cmn_keys.end(), cmn_keys1.begin(), cmn_keys1.end(),
inserter(cmn_keys2, cmn_keys2.begin()));
cmn_keys = cmn_keys2;
}
for (i = 0; i<cmn_keys.size(); i++)
{
freq.insert(std::pair<int, double> (i, avg_fr(i, freqs)));
}
return freq;
}
не могу понять как перевести строчку:
for i in freqs[1:]:
cmn_keys = cmn_keys.intersection(set(i.keys()))
мозг уже кипит, спасибо за понимание!