gpt4 book ai didi

python - 尝试在 Python : delete item in map and "vector.erase(vector.end())" 中重写 C++ 代码时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:17 26 4
gpt4 key购买 nike

我没有 C++ 经验,但最近需要用 Python 重写一个 C++ 项目。我遇到了几个未能解决的问题,其中一些问题如下:

问题一

假设有一张 map sampleMap和一个整数 anConstant在 C++ 代码中:

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)应该从 map 中删除对 sampleMap如果值(实际上是一个 vector )的大小小于整数(anConstant)。

所以我用Python重写了下面的代码:

for key, value in sampleMap.copy().items():
if len(value) < anConstant:
del sampleMap[key]

但似乎它没有正常工作。也许我误解了c++代码的意思,谁能帮我理解c++代码?

问题2

同样,假设有一个名为 sampleMap 的 map , 一个名为 sampleVector 的 vector , 两个名为 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 中.

但是最后一句我不明白:它似乎并没有尝试移除vector中的最后一个元素。那么它有什么作用呢?代码运行正确。

请帮助我理解 C++ 代码。谢谢!

================编辑==================

谢谢大家的解答!

对于问题1,在测试了c++代码和python代码后发现python代码运行良好。无论如何,我确定了 c++ 代码的含义,我学到了很多东西 :P

对于问题2,我还不知道是什么sampleVector.erase(sampleVector.end())在这里,但我试图将其重写为 del sampleVector[-1] (删除 sampleVector 的最后一项),输出与 c++ 代码相同。多么奇怪啊!我将开一个新帖子来讨论这个问题,并在此处提供新链接。

再次感谢大家! :D

最佳答案

问题一

你可能只使用 dictionary comprehension :

sampleMap = {key: value for (key, value) in sampleMap.items() if value[1] > anConstant}

问题2

看起来像是未定义的行为。在最好的情况下,sampleVector.erase(sampleVector.end()) 什么都不做。

关于python - 尝试在 Python : delete item in map and "vector.erase(vector.end())" 中重写 C++ 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55006103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com