2011-10-27 4 views
1

У меня есть список штатов США вместе с различными свойствами и в тех городах с различными свойствами, и все это необходимо динамически создавать при запуске, в настоящее время из текстового файла.Является ли класс лучшим способом для хранения данных C++?

В питоне, со слегка разбитым синтаксисом для удобства чтения, я хотел бы использовать матрицу Dict (что звучит ужасно), которые могут быть представлены что-то вроде этого:

locations = { 
    "Alabama": { 
     "url" : "www.domain.com/page.php", 
     "users": 8 
     "cities" : { 
      "city1": { 
       "url" : "www.domain.com/page.php", 
       "users": 2 
      } 
      "city2": { 
       "url" : "www.domain.com/page.php", 
       "users": 1 
      } 
     } 
    } 
} 

я мог бы использовать класс, конечно, но это действительно не нужно просто представлять его; в python для такого небольшого списка dict будет намного полезнее, и в настоящее время я не планирую нуждаться в дополнительной функциональности классов или db. Будет немного больше деталей и, конечно, всех штатов и, возможно, 0-10 городов/регионов на каждое государство, но относительно небольших в целом.

В C++ я мог бы получить аналогичную вещь с вложенными unordered_map, возможно, но, с одной стороны, я не могу смешивать типы данных с неупорядоченной картой, поэтому «пользователи» должны быть строкой вместо int (и я «Я не знаю более подходящего встроенного типа), но я могу легко сделать, используя строки для большинства вещей, однако то, что заставило меня прийти и задать этот вопрос, - это когда вы создаете объявление заголовка, я быстро понял, что он выглядел действительно уродливым и едва ли удобочитаемый. Это будет const, когда он будет создан, а также fwiw, иначе я бы просто создал его на лету, как с python. Несмотря на то, что я не всегда слежу за ними, я в основном ищу совет по лучшей практике здесь, как должен Я представляю эти данные, если я получаю оценку или иным образом публикую ее?

+0

Я бы сделал 'города' массивом. – Pablo

ответ

0

Почему бы не сохранить его в JSON или XML и получить библиотеку для чтения JSON или XML?

+0

кроме того, что установка дополнительных библиотек отстой иногда – Nacht

+0

сохраните его, но вы хотите, JSON кажется прекрасным, но исходный вопрос заключается не в разборе файла, а в том, как представлять данные с объектами. – mergeconflict

+0

как хранить это было частью вопроса, так как он прокомментировал уродство представления. – Nacht

4

Предполагая, что State всегда имеет те же поля (url, users и cities), это хорошая практика для создания класса для него. Аналогично City. Тогда вы будете в конечном итоге либо:

  • map<string, State> для вашего местоположения, а также map<string, City> для городов в каждом штате, или ...
  • set<State> для ваших местах (где State имеет name поле, по которому это индексированный) и set<City> для городов в каждом штате (опять же, каждый с полем name).

Вы хотите войти в привычку позволять системе типа работать для вас, насколько это возможно.

+0

Одна заметка относительно 'set': у них есть неудачное свойство предотвращения изменений на содержащихся объектах. Для свойств это может быть не проблема (при условии, что эти свойства не изменяются), но, например, для количества пользователей это может раздражать. –

+0

еще один о std :: set состоит в том, что он хранит только уникальные элементы, это было бы проблемой, если состояние содержит два города с одинаковым именем, а класс City использует его имя как индекс. –

0

Вкратце: да. Вы хотите классы для своих городов и штатов.

Возможно, вы захотите сделать что-то вроде того, что каждому государству и городу присвоен уникальный идентификатор. Этот идентификатор может быть индексом в массив для быстрого поиска.

После этого вы можете легко отслеживать каждый город, в каком состоянии он входит через идентификатор.

Это должно быть хорошей отправной точкой в ​​том, как организовать его, поскольку вы действительно просто задали вопрос «да/нет».
Остальное остается упражнением для читателя. (это действительно довольно редко, что можно законно сказать, что в ответе)

Смежные вопросы