Производительность во вложении трех карт против отдельных карт в C++

Я запутался, выбирая между двумя методами, чтобы иметь структуру STL,

Метод А:

map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*>

Метод Б:

Желательно ли вышеуказанное или иметь отдельные карты, как показано ниже,

map<pair<string,int>,vector<string>>

После запроса с этой родительской карты, затем итерации вектора и запрос второй карты

map<string,map<ULONG,vector<string>>*>

Из вышеперечисленных двух методов, который является оптимальным и который приведет к увеличению производительности?

Обновление 1:

Моя цель - сохранить выходные журналы в памяти, которая имеет три группы. Самым внешним ключом "pair" является родительская группировка, которая имеет свои собственные подгруппы. И у каждой подгруппы будут свои собственные группы.

После TypeDef метод A:

  typedef map<ULONG,vector<string>> Sub_Map2;
   typedef map<string,Sub_Map2*> Sub_Map1;
   typedef map<pair<string,int>,Sub_Map1*> Parent_map;

Для лучшей читаемости

2 ответа

Не идите с преждевременной оптимизацией. Используйте чистый код и пытайтесь оптимизировать его, только если вы видите узкое место в этом коде. Используйте typedef для обеспечения читабельности.

Т.е. (я не знаю, как вы хотите это организовать).

typedef map<ULONG, vector<string>> IDLogMap;
typedef map<pair<string, int>, IDLogMap> PairLogMap;

В любом случае, я предлагаю вам немного изменить свой код, создав некоторый класс сообщений журнала и так далее, потому что map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*> это слишком сложно для меня, особенно если вы хотите получить конкретное сообщение в журнале. Также старайтесь избегать сырых указателей.

std::map будет распределять каждую пару ключ-значение отдельно, поэтому при вставке или удалении элементов из карт перераспределение не выполняется. Это означает, что нет никакой разницы между двумя версиями (кроме дополнительного поиска).

Тем не менее, вариант B может быть лучше, если вам когда-нибудь понадобится выполнить итерации внутренних карт самостоятельно - если вы этого не сделаете, нет необходимости усложнять код.

Другие вопросы по тегам