stl"vector <T>太长了"

Phe*_*nix -1 c++ stl vector

我在其他答案中读到,c ++编译器的最大大小std :: vector没有限制.我试图使用矢量为一个目的,并需要有10 ^ 19项.

typedef struct{
  unsigned long price, weight;
}product;


//inside main
unsigned long long n = 930033404565174954;
vector<product> psorted(n);
Run Code Online (Sandbox Code Playgroud)

程序打破了最后一个声明.如果我尝试resize(n)而不是初始化n然后还有消息的程序中断:

vector<T> too long
std::length_error at memory location
Run Code Online (Sandbox Code Playgroud)

我需要在放入向量后对价格进行排序.我该怎么办 ?

Nic*_*las 13

std::vector 确实有多少东西可以承载极限.您可以使用std::vector::max_size它来查询,返回您可以使用的最大大小.

10 ^ 19项.

你有10^19 * sizeof(product)记忆吗?我猜你没有~138 Exa字节的RAM.另外,您必须在64位模式下进行编译才能考虑分配这么多.编译器没有破坏; 试图分配太多东西你的执行是破碎的.

  • @Pheonix:如果你问的是如何对这些数据进行排序,那么你应该解释一下你从哪里得到它,因为你的数据显然比RAM要多.你的问题的标题是误导性的. (2认同)
  • @Pheonix:我很确定他们希望你使用递归算法来计算出**算法中应该进入的顺序.而不是将它们写入比实际存在*更多的RAM,然后尝试用快速排序对它们进行排序. (2认同)

Oli*_*rth 6

其他人已经告诉你问题是什么.一种可能的解决方案是使用STXXL库,它是STL的一种实现,专为巨大的内存不足数据集而设计.

但是,10 ^ 19个8字节的项目是8000万TB.我不确定是否有人有一个大的磁盘......

此外,假设磁盘带宽为300MB/s,这需要8000年才能完成!