Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Двумерный вектор из разных типов - возможно? - C++

08.09.2013, 21:13. Просмотров 951. Ответов 3
Метки нет (Все метки)

Добрый вечер.

Не по теме:

ага, как вечер, так начинаются походы по сказочным лесам



Возник такой вопрос по поводу "улучшения" класса.

Значит, есть у меня в классе 4 переменных: string, string, int, int.
и всё же, мне хотелось бы их "объединить" во что-то одно, одновременно разделяя.


Прочитала тему про двумерные вектора. По сути, это ведь создали вектор, но содержит вектора, а вот те другие вектора - переменные указанного типа.

Внимание вопрос: можно ли сделать двумерный вектор, у которого бы 1 и 2 столбец были типа string, другие два - int.

Вопрос возник из-за чего: когда пишем:

vector < vector<int>>

мы по сути в данном примере будем запускать 4 раза этот вектор, чтобы сделать то, что нужно.
Нельзя ли как-то именно запустить этот процесс (можно даже прописать в ручную), чтобы другие вектора буди другого типа?

Или это уже на создание класса для класса?

Не по теме:

Или это уже тема на нобелевскую? Или что там ещё?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерный вектор из разных типов - возможно? (C++):

Создать универсальный вектор для разных типов класса - C++
Нужно создать абстрактный класс, в котором будет метод Add(), типа вектор, но этот метод должен использоваться в трех классах наследниках,...

преобразование типов (класс вектор) C++ - C++
Доброй ночи ув. форумчане. Пожалуйста помогите сделать преобразования типов, пытался что-то навоять, прочитал немало материала по этой...

Хранение разных типов - C++
Приветствую всех. Возник вот такой вопрос. У меня есть, например, 3 разных структуры, каждая из которых имеет разные поля: struct one ...

Сложение разных типов - C++
У меня из файла в переменную int считывется число.. Мне нужно занести в переменную string это число + строка. Например int...

Указатели разных типов - C++
Добрый день уважаемые форумчане !!! Хочу уточнить для себя следующую деталь. Есть базовый класс Fada и производные от него Tasa ...

Матрица из разных типов - C++
хочу создать клас Matrix елементы обьектов которого могли бы быть разных типов. была идея создать клас Cell и определить его как...

3
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
08.09.2013, 21:52 #2
Если я правильно понял вопрос, то вот один из вариантов ответа : std::vector<std::tuple<std::string, std::string, int, int>> ( на c++11, или с boost::tuple для c++03 )
1
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
08.09.2013, 22:02  [ТС] #3
Voivoid, т.е., это получится так: у нас будет "двумерный вектор", где первые два с типом string, другие два с типом int?

C++
1
std::tuple
это, как я поняла, и было определяющим для типов.

Спасибо вам огромное!

Тогда вопрос для "ещё":
а какие могли бы быть варианты? Так, на вскидку.
0
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
09.09.2013, 10:27 #4
Второй вариант заключается в использовании отдельной структуры:
C++
1
2
3
4
5
6
7
struct coolstruct {
    std::string s1;
    std::string s2;
    int i1;
    int i2;
};
std::vector<coolstruct> vec1;
"двумерный вектор", где первые два с типом string, другие два с типом int?
Это одномерный вектор который содержит объекты, каждый из которых представляет собой упорядоченное множество состоящее из объектов указанных в std::tuple типов, т.е. из string, string, int, int.

Пример:

C++
1
2
3
4
5
6
7
std::vector<std::tuple<std::string, std::string, int, int>> vec;
vec.push_back( std::make_tuple( "str1", "str2", 1, 42 ) );
 
std::string s1 = std::get<0>( vec[ 0 ] ); // s1 == "str1"
std::string s2 = std::get<1>( vec[ 0 ] ); // s2 == "str2"
int i1 = std::get<2>( vec[ 0 ] ); // i1 == 1
int i2 = std::get<3>( vec[ 0 ] ); // i2 == 42
Про tuple поподробнее можно почитать скажем здесь: http://qosys.info/97/tuple-cpp-%D0%B...B5%D0%B6%D0%B8

Если нужен именно двумерных вектор, то предыдущую конструкцию нужно завернуть в еще один вектор
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 10:27
Привет! Вот еще темы с ответами:

Приведение типов, возможно ли такое - C++
Всем доброго времени суток... Не знаю как правильно спросить то что я хочу, но попробую объяснить на примере) u_char *packet; //массив...

Использование разных типов указателей - C++
Здравствуйте! Программа должна засерать переменную n, а вместо этого она забивает мусором переменную upper. Можете подсказать в чём дело? ...

Открытие разных типов файлов - C++
Добрый день. Я тут задался вопросом &quot;а можно ли открыть изображение через fstream в бинарном режиме?&quot;, через пару минут понял что нет. ...

Сравнение переменных разных типов - C++
Здравствуйте. Столкнулся с проблемой не совпадения типов данных. Есть переменная string str, которая, к примеру, имеет значение &quot;1245&quot;....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
09.09.2013, 10:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru