Это нормальная практика или очень плохо вкладывать карты? - PullRequest
2 голосов
/ 30 марта 2011

Это нормальная практика или очень плохо вкладывать карты в несколько уровней?

        // name property     // name singal         // interval of Ranges      // values

typedef std::map<std::string, std::map<std::string, std::map<RangeSignalValue, std::string > > > sgHashSignals;

Ответы [ 4 ]

10 голосов
/ 30 марта 2011

Я, конечно, сделал это. Однако я бы разбил определение на удобоваримые куски:

typedef std::map<RangeSignalValue, std::string> RangeIntervalMap; 
typedef std::map<std::string, RangeIntervalMap> NameSignalMap;
typedef std::map<std::string, NameSignalMap>    NamePropertyMap;
2 голосов
/ 30 марта 2011

Если это имеет смысл в контексте, в котором вы работаете, то я не вижу никаких проблем, кроме того, что это может быть трудно читать.Можно ли использовать typedef, чтобы облегчить понимание некоторых из этих вложенных карт?

1 голос
/ 30 марта 2011

Например:

typedef std::map<RangeSignalValue, std::string> RangesValues;

typedef std::map<std::string, std::map<std::string, RangesValues > > sgHashSignals;
0 голосов
/ 30 марта 2011

Самая большая проблема заключается в том, что поиск немного медленнее, чем альтернатива:

           // property+signal, concatenated // interval of Ranges    // values

typedef std::map<std::string, std::map<RangeSignalValue, std::string > > sgHashSignals;

Точно, как вы должны объединить первые две строки, зависит от их синтаксиса.

Это заменяет двапоиск строк по одному.Недостатком является то, что он занимает больше памяти.

...