访问此数据的最佳方式是什么?

时间:2015-06-17 11:14:08

标签: c++ vector

对于我正在处理的程序,我从mysql获取数据并写入csv文件。然后我将从csv获取数据并将其放入C ++中的2d向量中。

我的csv文件很可能在1到150万行和8列之间。现在csv可以被认为是一堆按ID号排序的块。也就是说,例如,前100行可能属于ID号1,接下来的80行属于ID号2,依此类推。我把它们全部放在一个csv中的原因是因为从mysql请求数据很慢而我只想发一个请求。

我的问题是,在我的C ++程序中创建一个包含整个csv文件的大型向量(150万x 8)会不会更好,或者在我创建100 x 8向量的循环中进行,然后是80 x 8矢量,依此类推?如果我没有很好地提出这个问题,我很抱歉。如果您有任何其他问题需要帮助澄清,我很乐意回答。

2 个答案:

答案 0 :(得分:0)

理论上分配大块将更好(新的在大块上具有更好的性能)。如果您使用std::vector<T>,请不要忘记从一开始就保留足够的内存,以防止在填充数据时重新分配。

答案 1 :(得分:0)

首先决定你喜欢稍后查找取决于ID,你可以使用std::unordered_multimap其中key作为你的记录ID,其他元素是你的类的成员变量。二维数组将在std::unordered_multimap这里无效并且无法使用ID作为查找的关键,因为您将无法将vector的索引转换为您的ID,因为ID会重复。

如果您更喜欢查找,请创建一个结构或类,以将记录的所有其他元素保留为类的数据成员,并使用ID作为std::unordered_multimap的键。您可以使用C ++ 11。

如果您没有C ++ 11,并且您更喜欢使用多键查找,则更喜欢使用std::multimap