Для моей программы мне нужен неупорядоченный ключ. Чтобы выполнить эту работу, я использую контейнер std :: unordered_map. Вот тестовый код:Различное поведение с контейнером std :: unordered_map в Windows и Linux
#include <iostream>
#include <unordered_map>
#include <string>
int main()
{
std::unordered_map<std::string, int> toto;
toto["Outlook"] = 454;
toto["Temperature"] = 4;
toto["Humidity"] = 554;
toto["Wind"] = 545454;
std::unordered_map<std::string, int>::iterator It = toto.begin();
std::cout << toto.size() << std::endl;
for (; It != toto.end(); ++It)
std::cout << (*It).first << std::endl;
getchar();
return (0);
}
На окнах (Visual Studio 2012) выводе является:
Outlook
Temperature
Humidity
Wind
Это правильно. Ни один вид не применялся.
Но на Linux вывод заключается в следующем:
Humidity
Outlook
Wind
Temperature
PS: В Linux я скомпилировать свою программу с -std :: C++ 0x и -std = Gnu ++ 0x и нет компиляции ошибка.
Итак, как можно вести себя по-разному с одной и той же программой? Заранее благодарим за помощь!
Это неупорядоченный. Почему вас беспокоит заказ? – chris
@chris Насколько я знаю, unordered_map использует хеш-результат как индекс элемента во внутреннем контейнере. Итераторы 'std :: unordered_map' являются итераторами этого контейнера, поэтому, когда вы выполняете trasversal через unordered_map, вы действительно транслируете этот внутренний контейнер. Итак, ** разные заказы означают разные результаты хеширования или разные политики распределения ** ** – Manu343726
@chris Моя точка зрения (и цель задачи ОП, я думаю): ** Почему две версии (исполнения) имеют разные порядки? ** Thats interesting – Manu343726