stl“vector <t>太长了”</t>

时间:2012-01-21 18:15:56

标签: c++ stl vector

我在其他答案中读到c ++编译器maximum size of std::vector没有限制。我试图将vector用于一个目的,并且需要有10 ^ 19项。

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


//inside main
unsigned long long n = 930033404565174954;
vector<product> psorted(n);

程序在最后一个语句中断开。如果我尝试resize(n)而不是使用n进行初始化,那么还会使用消息编程中断:

vector<T> too long
std::length_error at memory location

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

2 个答案:

答案 0 :(得分:12)

std::vector 确实对可携带的内容有限制。您可以使用std::vector::max_size进行查询,这会返回您可以使用的最大尺寸。

  

10 ^ 19项。

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

答案 1 :(得分:6)

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

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

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