Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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++ 在数组中表示NA是否有性能良好的方法?_C++_Nan_Na_Boost Variant - Fatal编程技术网

C++ 在数组中表示NA是否有性能良好的方法?

C++ 在数组中表示NA是否有性能良好的方法?,c++,nan,na,boost-variant,C++,Nan,Na,Boost Variant,注意,我特别指的是术语NA,而不是NaN,因为我不仅包括数字类型 我一直在尝试在不同类型的数组中表示NA值,例如: int,float,bool,string,class 然而,我一直很难想出好的方法来表示NA值,而这不会显著影响性能 例如,将名为StringNA的boost::variant与类型string和表示NAstruct NA的结构一起使用,然后创建类型为StringNA的数组,这是在数组中表示NA值的一种方法 但这导致了严重的性能问题,因为首先我必须检查StringNA的类型,其次

注意,我特别指的是术语NA,而不是NaN,因为我不仅包括数字类型

我一直在尝试在不同类型的数组中表示NA值,例如:

int
float
bool
string
class

然而,我一直很难想出好的方法来表示NA值,而这不会显著影响性能

例如,将名为
StringNA
boost::variant
与类型
string
和表示NA
struct NA
的结构一起使用,然后创建类型为
StringNA
的数组,这是在数组中表示NA值的一种方法

但这导致了严重的性能问题,因为首先我必须检查
StringNA
的类型,其次是
boost::get
将其强制转换以获取字符串

这只是我的一个想法。有没有更好的方法来实现这一点

正如我希望解决的问题一样:

[“String”,NA,“String2”,“String3”,NA]

编辑


数组中的NAs数量在编译时未知

?fwiw,在访问该值之前,您无法避免先检查该值是否可用。不管怎样,您都必须为此付费。使用
variant
访问怎么样?这通常作为一个跳转映射来完成,其中访问者重载存储在一个数组中,并使用活动替代项的索引来执行访问。我不能说Boost是否以这种方式实现,但是C++标准要求它(至少对于单一变量访问来说,它必须是固定的时间-这迫使它)使用两个大小相同的数组:一个存储实际数据,另一个存储标记,不管该项是NA。我相信这会改善内存布局,从而提高性能。一如既往:测量。如果NA的数量超过其他的,你可以使用某种稀疏数组。?fwiw,你不能避免在访问它之前先检查该值是否可用。不管怎样,您都必须为此付费。使用
variant
访问怎么样?这通常作为一个跳转映射来完成,其中访问者重载存储在一个数组中,并使用活动替代项的索引来执行访问。我不能说Boost是否以这种方式实现,但是C++标准要求它(至少对于单一变量访问来说,它必须是固定的时间-这迫使它)使用两个大小相同的数组:一个存储实际数据,另一个存储标记,不管该项是NA。我相信这会改善内存布局,从而提高性能。一如既往:测量。如果NA的数量超过其他的,你可以使用某种稀疏数组。