Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6464
Последний выпуск: 19.06.2015

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

49K
22 июня 2011 года
_LiS_
1 / / 09.06.2009
Всем привет!
Очень нужна помощь в переводе с 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.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);
        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()))


если что-то делаю не правильно, пожалуйста, объясните!
мозг уже кипит, спасибо за понимание!
84
22 июня 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: _LiS_
не могу понять как перевести строчку:

 
Код:
for i in freqs[1:]:
        cmn_keys = cmn_keys.intersection(set(i.keys()))



Так вроде сделал же. Что не работает в коде ниже?

Цитата: _LiS_
 
Код:
for(i=1; i<freqs.size(); i++)
    {
        std::set<int> cmn_keys2;
        cmn_keys1 = get_keys(freqs);
        set_intersection(cmn_keys.begin(), cmn_keys.end(), cmn_keys1.begin(), cmn_keys1.end(),
            inserter(cmn_keys2, cmn_keys2.begin()));
        cmn_keys = cmn_keys2;
    }

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог