Я запутался, выбирая между двумя методами, чтобы иметь структуру 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;
Для лучшей читаемости
Не идите с преждевременной оптимизацией. Используйте чистый код и пытайтесь оптимизировать его, только если вы видите узкое место в этом коде. Используйте 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 может быть лучше, если вам когда-либо понадобится выполнить итерации внутренних карт самостоятельно — если вы этого не сделаете, нет необходимости усложнять код.