Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中,使用何种数据结构快速存储具有可变行数和可变子元素数的文本文件+;?_C++_Arrays_Performance_Data Structures_Vector - Fatal编程技术网

C++ 在C+中,使用何种数据结构快速存储具有可变行数和可变子元素数的文本文件+;?

C++ 在C+中,使用何种数据结构快速存储具有可变行数和可变子元素数的文本文件+;?,c++,arrays,performance,data-structures,vector,C++,Arrays,Performance,Data Structures,Vector,首要任务是以毫秒为单位的性能(速度)。 使用什么数据结构快速存储文本文件? 给定文本文件可能具有可变行数。 每条线的坐标数量可变。每个坐标都需要经过计算。 同样,我想按顺序访问点,以进行计算。如有必要,移除一些坐标。 将有足够的可用内存空间,比文件大小大上千倍 x1,y1 x2,y2 .... x6,y6 x7,y7 ..... ...... 准确地说,文件如下所示- 7866.777,505.821 -7866.773,508.291 -786.8402,500.845 -7864835.1

首要任务是以毫秒为单位的性能(速度)。 使用什么数据结构快速存储文本文件? 给定文本文件可能具有可变行数。 每条线的坐标数量可变。每个坐标都需要经过计算。 同样,我想按顺序访问点,以进行计算。如有必要,移除一些坐标。 将有足够的可用内存空间,比文件大小大上千倍

x1,y1 x2,y2 ....
x6,y6 x7,y7 .....
......
准确地说,文件如下所示-

7866.777,505.821 -7866.773,508.291 -786.8402,500.845 -7864835.125147422,5084020.882938482
-7865228.42,508.491642 -7864114.999361482,5081606.040795522
-8865228.42,508.4642 -7864.999361,5081.040795522
现在如何快速存储每个元素? 我可以把它存储在vector中吗?它很灵活,但速度很慢。 我可以将其存储在2d阵列中吗?它最快吗?但它的行数可变,每行中的元素数也不同。另外,数组中的元素数需要保持不变,所以是否有其他方法可以使用动态增长的数组

更新
由于询问了详细信息,我正在用详细信息更新问题,并尽可能精确。

一种方法是将整个文件读入一个文件,然后使用该文件代替该文件。使用
std::istringstream
意味着整个文件将存储在比磁盘快得多的内存中。

一种方法是将整个文件读取到一个文件中,然后使用该文件代替该文件。使用
std::istringstream
意味着整个文件将存储在比磁盘快得多的内存中。

“快速存储”没有意义。
将数据直接存储在内存中的最快方法是普通字符串/向量。
如果需要检索数据,还可以从普通字符串/向量中读取数据。
操作数据的最快方法可能是使用一种称为“绳子”的数据结构,但这不是C++标准库的一部分,所以你必须在别处找到它。 不过,目前我觉得你还不清楚自己到底想做什么,所以很难给出准确的答案。

“快速存储”毫无意义。
将数据直接存储在内存中的最快方法是普通字符串/向量。
如果需要检索数据,还可以从普通字符串/向量中读取数据。
操作数据的最快方法可能是使用一种称为“绳子”的数据结构,但这不是C++标准库的一部分,所以你必须在别处找到它。
现在我觉得你还不清楚自己到底想做什么,所以很难给出准确的答案。

'我能把它存储在vector中吗?你是如何衡量这一点的?你首先应该做的是,分析和衡量你的程序,看看实际的瓶颈在哪里。还有,你真的需要它更快吗?你的要求是什么?你的用例是什么?你在做什么?请阅读。对于任何正常情况,大部分时间都花在文本格式上,而不是存储数据。如果确实需要显著提高性能,请使用二进制序列化表示并跳过格式化。@πάνταῥεῖ - 在这种情况下,我们不知道提前的行数和子元素数。所以,我使用了向量加上推回。但是,我读到pushback比array更昂贵但是,我知道后推很昂贵,这取决于初始/后续的alloc大小。此外,如果文件中的所有数据都是整数,则不需要行号。
while(instream>>number){datavec.push_back(number);}
IMHO(有多种方法可以跳过
',
字符)。“我可以将其存储在vector中吗?”?你是如何衡量这一点的?你首先应该做的是,分析和衡量你的程序,看看实际的瓶颈在哪里。还有,你真的需要它更快吗?你的要求是什么?你的用例是什么?你在做什么?请阅读。对于任何正常情况,大部分时间都花在文本格式上,而不是存储数据。如果确实需要显著提高性能,请使用二进制序列化表示并跳过格式化。@πάνταῥεῖ - 在这种情况下,我们不知道提前的行数和子元素数。所以,我使用了向量加上推回。但是,我读到pushback比array更昂贵但是,我知道后推很昂贵,这取决于初始/后续的alloc大小。此外,如果文件中的所有整数数据都是
while(instream>>number){datavec.push_back(number);}
IMHO(有多种方法可以跳过
,“
字符),那么您也不需要行号。您真的只是建议使用I/O流来回答有关高性能数据结构的问题吗@Mehrdad至少这是一种进入记忆的方式。我认为,主要的问题是,OP真的需要从最优化的底层代码中获得神秘、晦涩和不可读(因此很难维护)的代码吗?这些代码需要几毫秒的时间吗?@JoachimPileborg在上述情况下,我如何使用istringstream读取/存储值?您是否有任何示例或参考链接。您是否真的建议使用I/O流来回答有关高性能数据结构的问题@Mehrdad至少这是一种进入记忆的方式。我认为,主要的问题是,OP真的需要从最优化的底层代码中获得神秘、晦涩和不可读(因此很难维护)的代码吗?这些代码需要几毫秒的时间吗?@JoachimPileborg在上述情况下,我如何使用istringstream读取/存储值?你有任何例子或参考链接。