std :: tuple和std :: map的效率

时间:2013-11-22 14:50:45

标签: c++ optimization maps tuples

我目前正在构建一个程序,它依赖于多个向量和映射来保留以前计算的信息。我的载体是标准格式,并不是很有趣。地图的格式为

std::map<std::string, long double> 

意图字符串是一个向量到另一个向量的可解析映射,例如

std::map<std::string, long double> rmMap("fvProperty --> fvTime", 3.0234);

我可以稍后分割字符串并将子字符串与矢量名称进行比较,以找出获取数字所涉及的字符串。 但是,我最近发现std :: tuple是可用的,这意味着我可以完全跳过字符串并使用向量位置而不是

std::tuple<unsigned int, unsigned int, long double>

这允许我(据我所知)使用第一个和第二个值作为键,这似乎比为我的索引解析字符串更好。

我的关键是我不知道这里的效率。对这些元组/地图的调用会有很多,而且功效至关重要,因为程序预计会在产生最终结果之前运行数周。

因此,我会问你,当涉及大型和计算密集的程序时,元组是否比地图更高或更有效(在内存,缓存和周期方面)。

编辑: 如果不能以这种方式使用元组,那么地图

std::map<std::pair<unsigned int, unsigned int>, long double>

是使用字符串进行识别的有效替代品吗?

2 个答案:

答案 0 :(得分:4)

地图的优点是有效地查询与密钥相关的数据。

它无法与仅将值组合在一起的元组进行比较:您必须自己旅行元组以检索正确的值。

使用迈克建议的map<pair<unsigned int, unsigned int>, long double>可能是要走的路。

答案 1 :(得分:1)

元组和地图用于非常不同的目的。所以它应该主要是关于你想要使用它们的内容,而不是它们的效率。用螺丝刀打开汽车会有些麻烦,因为你会尝试用车钥匙固定螺丝。我建议反对两者。

元组是一个小数据集,在您的情况下,例如集合{1,2,3.0234}。映射用于将多个键映射到其值。实际上,映射内部由多个元组(对)组成,每个元组包含一个键和相关的值。在地图内部,对的排列方式使得搜索键变得容易。

在您的情况下,我更喜欢编辑建议的map<pair<int, int>, double>。键(即矢量索引配对)比那些字符串更容易搜索和“解析”。