Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++ std::tuple和std::map的效率_C++_Optimization_Maps_Tuples - Fatal编程技术网

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:我们彼此都打过了。:-)你编辑了你的评论,几乎说出了我添加到你评论中的内容。我想最好编写一个小测试应用程序,看看你的速度如何?要我写一个吗?你打算以后如何访问这个结构?重复整个过程?主要通过两个向量索引进行查询?通过一个向量指数?你的回答将决定正确的结构。然后我将试试这个。希望它能比我现在做的更快。谢谢。那我就试试这个。希望它能比我现在做的更快。非常感谢。