C++ 计算大量数据的中值

C++ 计算大量数据的中值,c++,algorithm,sorting,C++,Algorithm,Sorting,我有大量的数据(>10000000),输入int,每个新项目我都要计算中位数(因此我将有>1000000个中位数)。我应该维护一个排序列表,并按顺序将项目插入该列表,然后每次计算中位数,还是每次插入后对列表进行排序 另外,std::vector是否是适合此应用的数据结构?或者另一种数据结构会带来更好的复杂性 注意:我不能使用std::set,因为如果使用std::multiset查找中间值会增加复杂性,因为我将从开始到中间循环以获取其值。我将使用std::multiset,因为它可以自动处理重复

我有大量的数据(>10000000),输入int,每个新项目我都要计算中位数(因此我将有>1000000个中位数)。我应该维护一个排序列表,并按顺序将项目插入该列表,然后每次计算中位数,还是每次插入后对列表进行排序

另外,
std::vector
是否是适合此应用的数据结构?或者另一种数据结构会带来更好的复杂性


注意:我不能使用
std::set
,因为如果使用
std::multiset
查找中间值会增加复杂性,因为我将从开始到中间循环以获取其值。

我将使用
std::multiset
,因为它可以自动处理重复项并维护排序顺序。我会一个接一个地插入数字,保持一个指向中位数的迭代器(根据新元素是大于还是小于中位数向前或向后)


请注意,如果这个文件太大,无法在内存中轻松保存,则可以将许多最高和最低元素打包到文件中;中位数不太可能移动那么远,如果移动了,您可以拆包并重新打包。

如果您的编辑是对我答案的回应,那么我一定没有足够清楚地解释我的解决方案;它不涉及从多集的开始到中间的迭代。我应该编辑我的答案吗?@Beta No在我看到你的答案之前编辑了它,我没有想到迭代器指向中间值,你的解决方案太棒了,谢谢you@samgak是的,但它是巨大的,每一条线我都需要得到中间值,这样效率就不会很高