c++ - 将 Python 翻译成 C++ : lists and tuples

标签 c++ python performance translation tuples

我目前正在将一段 Python 代码转换为 C++ 以提高速度。 这是代码(注意,qsort 是我自己编写的快速排序):

base = sys.stdin.readline().split()
n = int(base[0])
m = int(base[1])
mult = m * 10
count = 1
output = []

while count != (n+1):

    hold = output + []
    if (n - count) + 1 >= mult:
        rev = mult
    else:
        rev = n - count + 1

    while rev != 0:
        temp = sys.stdin.readline().split()
        hold.append((int(temp[0])*count,temp[1], count))
        count += 1
        rev -= 1

    hold = qSort(hold,len(hold))
    output = hold[:m]

本质上,我正在获取几行输入,将它们添加到一个名为 hold 的临时列表中,该列表包含新项目和现有输出,然后我的快速排序根据它们的值(作为第一个元素给出)对项目进行排序/附加元组中的整数)。在 Python 中,这个过程非常简单,因为我只是保留一个元组列表作为保存和输出,每个元组包含三项:(1) 用于排序的整数,(2) 字符串,(3) 整数。 我想知道将其转换为 C++ 的最佳方法是什么。我应该维护 3 个单独的数组并同时更新所有数组,还是应该使用列表和元组类。 (我试图让我的代码尽可能快地运行)。此外,在决定使用一种方法之后,我怎样才能最好地转换保持和输出之间的相互作用?我如何才能在循环开始时有效地不断刷新保持并在结束时有效地修改输出?

非常感谢任何帮助!伙计们,干杯!

最佳答案

应该可以重写您的 Python 以使其足够快。

首先,将所有输入收集到一个列表中。

其次,使用 list.sort() 方法函数对列表进行排序,并使用 key= 参数按数字排序。

您自己的排序函数将比内置的 Python 排序慢。而且我不清楚代码在做什么,但它似乎不止一次调用排序函数(外部 while 循环每个循环运行一次排序函数)。按照我的建议重写,应该很快。

编辑:此代码的功能是否与您的原始代码大致相同?

from operator import itemgetter
import sys

with sys.stdin as f:
    base = f.readline().split()
    n = int(base[0])
    m = int(base[1])

    hold = []
    for i, line in enumerate(f, 1):
        lst = line.split()
        weight = int(lst[0]) * i
        tup = (weight, lst[1], i)
        hold.append(tup)

hold.sort(key=itemgetter(0))
output = hold[:m]

for tup in output:
    print(tup[1])

关于c++ - 将 Python 翻译成 C++ : lists and tuples,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492566/

相关文章:

php - MySQL 数据库连接未关闭 : what will happen?

c++ - mkl_free() 问题

python - 无法运行 eve 的第一个 run.py

php - 提高MySQL查询性能——可能的索引问题

asp.net - Eval 和 ItemDataBound 或 RowDataBound 事件显示数据,哪个更好?

javascript - 如何修复 Django 中的 "object() takes no parameters"错误

c++ - 调用某些回调函数两次导致段错误 : Nan

c++ - OpenCV - 去除凸性缺陷(Python 到 C++)

c++ - C++模板构造函数的问题

python - 尝试从 Python 中的 copyfileobj 获取进度