Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 22, 2011 00:05:23

_LiS_
От:
Зарегистрирован: 2011-06-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод с Python на C++

Всем привет!
Очень нужна помощь в переводе с 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
На входе vector<string> - в векторе записаны имена файлов.
На выходе 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;
}
функция get_keys вытаскивает ключи Мапа

не могу понять как перевести строчку:

for i in freqs[1:]:
cmn_keys = cmn_keys.intersection(set(i.keys()))
если что-то делаю не правильно, пожалуйста, объясните!
мозг уже кипит, спасибо за понимание!



Офлайн

#2 Июнь 22, 2011 10:39:33

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version