C++ 在数组中表示NA是否有性能良好的方法?
注意,我特别指的是术语NA,而不是NaN,因为我不仅包括数字类型 我一直在尝试在不同类型的数组中表示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的类型,其次
int
,float
,bool
,string
,class
然而,我一直很难想出好的方法来表示NA值,而这不会显著影响性能
例如,将名为StringNA
的boost::variant
与类型string
和表示NAstruct NA
的结构一起使用,然后创建类型为StringNA
的数组,这是在数组中表示NA值的一种方法
但这导致了严重的性能问题,因为首先我必须检查StringNA
的类型,其次是boost::get
将其强制转换以获取字符串
这只是我的一个想法。有没有更好的方法来实现这一点
正如我希望解决的问题一样:
[“String”,NA,“String2”,“String3”,NA]
编辑
数组中的NAs数量在编译时未知?fwiw,在访问该值之前,您无法避免先检查该值是否可用。不管怎样,您都必须为此付费。使用
variant
访问怎么样?这通常作为一个跳转映射来完成,其中访问者重载存储在一个数组中,并使用活动替代项的索引来执行访问。我不能说Boost是否以这种方式实现,但是C++标准要求它(至少对于单一变量访问来说,它必须是固定的时间-这迫使它)使用两个大小相同的数组:一个存储实际数据,另一个存储标记,不管该项是NA。我相信这会改善内存布局,从而提高性能。一如既往:测量。如果NA的数量超过其他的,你可以使用某种稀疏数组。?fwiw,你不能避免在访问它之前先检查该值是否可用。不管怎样,您都必须为此付费。使用variant
访问怎么样?这通常作为一个跳转映射来完成,其中访问者重载存储在一个数组中,并使用活动替代项的索引来执行访问。我不能说Boost是否以这种方式实现,但是C++标准要求它(至少对于单一变量访问来说,它必须是固定的时间-这迫使它)使用两个大小相同的数组:一个存储实际数据,另一个存储标记,不管该项是NA。我相信这会改善内存布局,从而提高性能。一如既往:测量。如果NA的数量超过其他的,你可以使用某种稀疏数组。