我目前正在构建一个程序,它依赖于多个向量和映射来保留以前计算的信息。我的载体是标准格式,并不是很有趣。地图的格式为
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>
是使用字符串进行识别的有效替代品吗?
答案 0 :(得分:4)
地图的优点是有效地查询与密钥相关的数据。
它无法与仅将值组合在一起的元组进行比较:您必须自己旅行元组以检索正确的值。
使用迈克建议的map<pair<unsigned int, unsigned int>, long double>
可能是要走的路。
答案 1 :(得分:1)
元组和地图用于非常不同的目的。所以它应该主要是关于你想要使用它们的内容,而不是它们的效率。用螺丝刀打开汽车会有些麻烦,因为你会尝试用车钥匙固定螺丝。我建议反对两者。
元组是一个小数据集,在您的情况下,例如集合{1,2,3.0234}
。映射用于将多个键映射到其值。实际上,映射内部由多个元组(对)组成,每个元组包含一个键和相关的值。在地图内部,对的排列方式使得搜索键变得容易。
在您的情况下,我更喜欢编辑建议的map<pair<int, int>, double>
。键(即矢量索引配对)比那些字符串更容易搜索和“解析”。