1) Является ли использование enum в качестве ключа в std :: map хорошей практикой?
Что ж, для эффективности при таком маленьком перечислении вам лучше использовать вектор или массив tr1 :: либо значений (если ваш тип значений поддерживает «пустые» значения), либо умных указателей. например: vector<string>
Для правильности - я верю, что ты в порядке. Map может работать с любым типом ключей, которые можно сортировать, то есть с оператором <или для которых вы предоставляете функцию сортировки. Перечисления имеют порядок по умолчанию </p>
2) В strMap.insert(Shape::Circle,"Circle")
почему метод вставки [дает] ошибку компилятора?
Потому что insert не принимает два значения. требуется пара. попробовать:
#include <utility>
...
strMap.insert(make_pair(Circle, string("Circle")));
3) Когда метод find () используется в классе карты, [он] выполняет некоторый логарифмический поиск ... правильно?
Да. map :: find - время O (LG (map :: size ())). Карта хранит свои пары ключ-значение в структуре данных, отсортированной по ключу. вставка и стирание O (LG (N)), как найти. Он также предоставляет двунаправленные итераторы, что означает, что вы можете найти следующий или предыдущий элемент на карте в O (1) постоянное время, но вы не можете пропускать вперед и назад более одного элемента за раз.
Редактировать: исправлено, что перечисления имеют порядок по умолчанию.