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