C++ std::tuple和std::map的效率
我目前正在构建一个程序,该程序依赖于多个向量和地图来保留以前计算的信息。我的向量是标准格式的,不是很有趣。地图的形式如下C++ std::tuple和std::map的效率,c++,optimization,maps,tuples,C++,Optimization,Maps,Tuples,我目前正在构建一个程序,该程序依赖于多个向量和地图来保留以前计算的信息。我的向量是标准格式的,不是很有趣。地图的形式如下 std::map<std::string, long double> std::map 字符串是一个向量到另一个向量的可解析映射,例如 std::map<std::string, long double> rmMap("fvProperty --> fvTime", 3.0234); std::map rmMap(“fvProperty-
std::map<std::string, long double>
std::map
字符串是一个向量到另一个向量的可解析映射,例如
std::map<std::string, long double> rmMap("fvProperty --> fvTime", 3.0234);
std::map rmMap(“fvProperty-->fvTime”,3.0234);
在这里,我可以稍后拆分字符串,并将子字符串与向量名称进行比较,以确定哪些子字符串参与了获取数字的过程。
然而,我最近发现std::tuple是可用的,这意味着我可以完全跳过字符串,使用向量位置代替
std::tuple<unsigned int, unsigned int, long double>
std::tuple
这允许我(据我所知)将第一个值和第二个值都用作键,这似乎比解析索引的字符串更可取
我的关键是我不知道这里的效率。将有很多对这些元组/映射的调用,有效性是关键,因为该程序预计将运行数周才能产生最终结果
因此,我想问您,当涉及到大型计算密集型程序时,元组是否比映射更有效(在内存、缓存和循环方面)
编辑:
如果元组不能以这种方式使用,映射
std::map<std::pair<unsigned int, unsigned int>, long double>
std::map
是否可以有效地替代使用字符串进行标识?映射的优点是可以高效地查询与密钥关联的数据 它无法与仅将值打包在一起的元组相比:您必须自己遍历元组才能检索正确的值
使用Mike建议的
映射
可能是一种方法。映射的优点是有效地查询与键相关的数据
它无法与仅将值打包在一起的元组相比:您必须自己遍历元组才能检索正确的值
按照Mike的建议,使用
map
可能是一种方法。元组和映射用于非常不同的目的。所以,它应该主要是关于你想用它们做什么,而不是它们的效率。你用螺丝刀开车会有麻烦,因为你要用车钥匙修螺丝。我反对这两种观点
元组是一个小数据集,在您的例子中,例如集合{1,2,3.0234}
。映射用于将多个键映射到它们的值。事实上,映射在内部由多个元组(对)组成,每个元组包含一个键和关联的值。在地图内部,这些对的排列方式使得搜索钥匙变得容易
在您的情况下,我更喜欢您的编辑建议的
地图
。键(即向量索引对)比那些字符串更容易搜索和“解析”。元组和映射用于非常不同的目的。所以,它应该主要是关于你想用它们做什么,而不是它们的效率。你用螺丝刀开车会有麻烦,因为你要用车钥匙修螺丝。我反对这两种观点
元组是一个小数据集,在您的例子中,例如集合{1,2,3.0234}
。映射用于将多个键映射到它们的值。事实上,映射在内部由多个元组(对)组成,每个元组包含一个键和关联的值。在地图内部,这些对的排列方式使得搜索钥匙变得容易
在您的情况下,我更喜欢您的编辑建议的
地图
。键(即向量索引对)比那些字符串更容易搜索和“解析”。元组不能代替映射;它只是一个简单的结构,有(在本例中)三个数据成员。如果要使用两个值作为映射键,则需要类似于map
的内容。您可能会或可能不会发现unordered\u map
比map
更有效,这完全取决于您对它们所做的操作。当然,您必须提供适当的比较功能,以便map
能够正确排序。或者,如果您不需要有序映射,可以使用unordered\u-map
,并提供适当的哈希函数。@MikeSeymour:我们彼此都打过了。:-)你编辑了你的评论,几乎说出了我添加到你评论中的内容。我想最好编写一个小测试应用程序,看看你的速度如何?要我写一个吗?你打算以后如何访问这个结构?重复整个过程?主要通过两个向量索引进行查询?通过一个向量指数?你的答案将决定正确的结构;它只是一个简单的结构,有(在本例中)三个数据成员。如果要使用两个值作为映射键,则需要类似于map
的内容。您可能会或可能不会发现unordered\u map
比map
更有效,这完全取决于您对它们所做的操作。当然,您必须提供适当的比较功能,以便map
能够正确排序。或者,如果您不需要有序映射,可以使用unordered\u-map
,并提供适当的哈希函数。@MikeSeymour:我们彼此都打过了。:-)你编辑了你的评论,几乎说出了我添加到你评论中的内容。我想最好编写一个小测试应用程序,看看你的速度如何?要我写一个吗?你打算以后如何访问这个结构?重复整个过程?主要通过两个向量索引进行查询?通过一个向量指数?你的回答将决定正确的结构。然后我将试试这个。希望它能比我现在做的更快。谢谢。那我就试试这个。希望它能比我现在做的更快。非常感谢。