我正在实现某种算法,我在此算法map<string,map<string,double>>
中使用。它工作得很好,给出了正确的结果,但是如果我为map<string,map<string,double>>
更改unordered_map<string,map<string,double>>
,我的算法就会停止为某些输入工作。
我想问一下我是否遗漏了unordered_map
和map
之间的区别。是否存在可能导致此问题的重要事项?
编辑:这是Floyd-Warshall算法,我认为数据排序不会出现问题。我正在使用map for的东西只是用于制作一个矩阵,其中包含2个节点之间的边缘值信息。
答案 0 :(得分:1)
取决于算法是什么。 map
会自动按键对其元素进行排序,unordered_map
不会为此烦恼。
因此,您可能会发现,即使它们中包含的数据相同,它的顺序也不同,这会干扰您的结果。
map
最适合静态数据,按键排序的事实允许它更快地找到事物。然而,对它进行排序可能非常耗时,因此如果您需要map
,但它会不断修改,unordered_map
可以成为更快的选择。
答案 1 :(得分:0)
是的,unordered_map包含无序数据。因此,如果算法需要有序数据,alogirtm将失败。
答案 2 :(得分:0)
好的,所以 - 我的问题的答案是:map
和unordered_map
之间没有任何其他根本区别。如果我不需要排序数据,我只需更改map
的{{1}},一切正常。
我认为,除了排序数据之外,这两者之间没有区别。