Изменение массива mx 3 в контейнер stl? - PullRequest
0 голосов
/ 19 января 2011

У меня есть массив:

const string ARRAY[][3] = {
    {"Kolkata","Mumbai","218"},
    {"Kolkata","New Delhi","316"},
    ...
    {"Mumbai","Chennai","715"},
    {"Chennai","Bangalore","516"},
};

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

Я думал о создании структуры, что-то вроде:

typedef struct row {
    string col1;
    string col2;
    string col3;
} row_t;

а затем создание vector<row_t>.Это хорошая идея?Есть ли более простой способ сделать это с помощью контейнера stl?Я также подумал о создании таблицы, достаточно большой, чтобы длиться какое-то время (количество строк меняется не так часто), но это не кажется правильным ..

Спасибо!

Ответы [ 4 ]

2 голосов
/ 19 января 2011

Наиболее простым преобразованием было бы использование массива в структуре:

struct row {
    std::string data[3];
};

std::vector<row> v;

Или вы можете использовать шаблон класса std:: / std::tr1:: / boost:: array:

std::vector<std::array<std::string, 3> > v;

Если вы собираетесь использовать отдельные элементы данных для каждого из элементов, как вы показываете в своем примере, вы должны дать им полезные имена, а не просто назвать их "col #".

1 голос
/ 19 января 2011

Это довольно хорошая идея.Вам просто нужно предоставить оператор >> для чтения из файла, и все готово.Тем не менее, я действительно не понимаю вещи typedef struct {}, которые у вас там есть - C ++ никогда не требовал этого.

0 голосов
/ 19 января 2011

Скорее всего, вы можете сойтись с агрегирующими векторами.

vector < vector < string > > Array;

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

vector < row_t > Array;
0 голосов
/ 19 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...