地图与无序地图

时间:2017-03-14 16:09:45

标签: c++ stl unordered-map

我正在实现某种算法,我在此算法map<string,map<string,double>>中使用。它工作得很好,给出了正确的结果,但是如果我为map<string,map<string,double>>更改unordered_map<string,map<string,double>>,我的算法就会停止为某些输入工作。

我想问一下我是否遗漏了unordered_mapmap之间的区别。是否存在可能导致此问题的重要事项?

编辑:这是Floyd-Warshall算法,我认为数据排序不会出现问题。我正在使用map for的东西只是用于制作一个矩阵,其中包含2个节点之间的边缘值信息。

3 个答案:

答案 0 :(得分:1)

取决于算法是什么。 map会自动按键对其元素进行排序,unordered_map不会为此烦恼。

因此,您可能会发现,即使它们中包含的数据相同,它的顺序也不同,这会干扰您的结果。

map最适合静态数据,按键排序的事实允许它更快地找到事物。然而,对它进行排序可能非常耗时,因此如果您需要map,但它会不断修改,unordered_map可以成为更快的选择。

答案 1 :(得分:0)

是的,unordered_map包含无序数据。因此,如果算法需要有序数据,alogirtm将失败。

答案 2 :(得分:0)

好的,所以 - 我的问题的答案是:mapunordered_map之间没有任何其他根本区别。如果我不需要排序数据,我只需更改map的{​​{1}},一切正常。

我认为,除了排序数据之外,这两者之间没有区别。