У меня нет опыта работы с C ++, но в последнее время мне нужно переписать проект C ++ на Python. Я столкнулся с несколькими проблемами, которые мне не удалось решить, и некоторые из них приведены ниже:
Задача 1
Допустим, в коде C ++ есть карта sampleMap
и целое число anConstant
:
for (typename map <string, vector <pair <unsigned int, int> > >::iterator l = sampleMap.begin(); l != sampleMap.end(); ) {
if (l->second.size() < anConstant) {
typename map <string, vector <pair <unsigned int, int> > >::iterator tmp = l;
tmp = l; ++tmp; sampleMap.erase (l); l = tmp;
} else {
++l;
}
}
В моем понимании код означает, что пара (key, value)
должна быть удалена с карты sampleMap
, если размер значения (фактически вектора) меньше, чем целое число (anConstant
).
Итак, я переписал код на Python ниже:
for key, value in sampleMap.copy().items():
if len(value) < anConstant:
del sampleMap[key]
Но, похоже, это не сработало правильно.
Может быть, я неправильно понял, что сказал код C ++, может ли кто-нибудь любезно помочь мне понять код C ++?
Задача 2
То же самое, скажем, есть карта с именем sampleMap
, вектор с именем sampleVector
, две константы с именами constantOne
и constantTwo
.
for (typename map <string, vector <pair <unsigned int, int> > >::iterator l = sampleMap.begin(); l != sampleMap.end(); ++l) {
if (sampleVector.size() - constantOne < constantTwo){
sampleVector.push_back(make_pair <string, unsigned int> (l->first, l->second.size()));
sampleVector.erase(sampleVector.end());
}
}
В моем понимании код говорит, что при циклическом отображении карты sampleMap
, если условие в операторе if
выполнено, тогда сделайте размер (key, value)
новой парой и добавьте пару в sampleVector
.
Но я не понимаю последнее предложение: похоже, что оно не пытается удалить последний элемент в векторе. Так что же это делает? Код работает правильно.
Пожалуйста, помогите мне понять код C ++. Спасибо!
================ EDIT ==================
Спасибо всем за решение!
Для проблемы 1, после тестирования кода c ++ и кода python я обнаружил, что код python работает хорошо. Во всяком случае, я убедился, что означает код c ++, я многому научился: P
Для проблемы 2, я все еще не знаю, что sampleVector.erase(sampleVector.end())
делает здесь, но я попытался переписать его как del sampleVector[-1]
(чтобы удалить последний элемент sampleVector) здесь, и результат был таким же, как и у С ++ код. Как странно это! Я открою новый пост, чтобы обсудить эту проблему и дам новую ссылку здесь.
Еще раз спасибо всем! : D