как хранить и ссылаться на большое количество данных в C ++ - PullRequest
0 голосов
/ 26 октября 2011

Я использую вектор строк для хранения некоторых данных в памяти. База данных не вариант. Точнее массив векторов строк. Простой сценарий: мне нужно хранить имена людей, живущих в 256 городах.

Пример

NewYork: John, Bod, ...
London: Jim, Bill...

для этого требования я использовал

vector<std::string> city[256];

Появилось новое требование для создания нового "класса Person", который будет содержать больше данных на элемент

class person {
 string name;
 string surname;
 string email;
 int age;
};

Я решаю эту проблему, чтобы найти оптимальный способ хранения и обмена этими данными.

vector<class person> city[256];

Очевидно, что лучше использовать указатель на объекты. shared_ptr применяется здесь? У нас есть TR1 установлен в системе, но мы не можем использовать boost libs.

Ответы [ 5 ]

1 голос
/ 26 октября 2011

Города, чел .. время для рассмотрения базы данных.

0 голосов
/ 26 октября 2011

Если у вас есть C ++ 11 и вам нужна только одна глобальная версия этих данных, вы можете использовать такую ​​структуру данных:

#include <unordered_map>
#include <unordered_set>
#include <string>

typedef std::unordered_multiset<std::string> name_set;
typedef std::unordered_map<std::string, name_set> city_map;

city_map city_db {
  { "Moscow", { "Ivan", "Igor", "Vladimir" } },
  { "Madrid", { "Julio", "Pedro", "Sanchez" } },
  { "Munich", { "Sepp", "Huber", "Maier" } }
};

int main()
{
  return city_db["Munich"].size(); // just as an example
}
0 голосов
/ 26 октября 2011

Я бы не сказал, что это так очевидно, что указатели лучше. Да, вы можете хранить shared_ptr в коллекции, хотя в зависимости от способа доступа к данным вы также можете использовать list или map.

0 голосов
/ 26 октября 2011

Вы можете использовать shared_ptr, или собственный указатель, или сохранить в качестве значения. Это зависит. Хотите быстрых поисков? Хотите сэкономить на памяти? Вы хотите данные в непрерывной памяти? Вы хотите поддерживать многопоточность? Там нет общего правильного ответа. 256 объектов - это не огромное количество данных.

0 голосов
/ 26 октября 2011

Или использовать вектор векторов? или список векторов?

...