Я конвертирую свою библиотеку C # в C ++. Я использую переменную C # Dictionary в приложении, и когда я попытался использовать std::map
вместо строки в качестве ключа в обоих сценариях, я почувствовал резкое различие в производительности.
C # Словарь занял 0,022717 секунд с кодом ниже. Карта C ++ занимает около 3 секунд.
C # Словарь:
Stopwatch stopWatch = new Stopwatch();
Dictionary<string, int> dict = new Dictionary<string, int>();
stopWatch.Start();
for (int i = 0; i < 100000; i++)
{
dict.Add(i.ToString(), i);
}
stopWatch.Stop();
var op = stopWatch.Elapsed.TotalSeconds.ToString();
Карта C ++:
#include <iostream>
#include <map>
#include <string>
#include <chrono>
using namespace std;
int main()
{
std::map<std::string, int> objMap;
tm* timetr = new tm();
time_t t1 = time(NULL);
localtime_s(timetr, &t1);
for (size_t i = 0; i < 100000; i++)
{
objMap.emplace(std::to_string(i), i);
}
tm* timetr2 = new tm();
time_t t2 = time(NULL);
localtime_s(timetr2, &t2);
time_t tt = t2 - t1;
cout << tt;
string sss = "";
cin >> sss;
}
Почему такая разница? Какой должна быть эквивалентная альтернатива для достижения таких же результатов?