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

Я запутался, выбирая между двумя методами, чтобы иметь структуру 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;

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

-1

Решение

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

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

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

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

2

Другие решения

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

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

0

По вопросам рекламы [email protected]