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

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

Восстановить пароль Регистрация
 
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
08.09.2013, 21:13     Двумерный вектор из разных типов - возможно? #1
Добрый вечер.

Не по теме:

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



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

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


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

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

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

vector < vector<int>>

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

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

Не по теме:

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

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 21:13     Двумерный вектор из разных типов - возможно?
Посмотрите здесь:

C++ Использование разных типов указателей
C++ преобразование типов (класс вектор) C++
Сложение разных типов C++
C++ Матрица из разных типов
Хранение разных типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
08.09.2013, 21:52     Двумерный вектор из разных типов - возможно? #2
Если я правильно понял вопрос, то вот один из вариантов ответа : std::vector<std::tuple<std::string, std::string, int, int>> ( на c++11, или с boost::tuple для c++03 )
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
08.09.2013, 22:02  [ТС]     Двумерный вектор из разных типов - возможно? #3
Voivoid, т.е., это получится так: у нас будет "двумерный вектор", где первые два с типом string, другие два с типом int?

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

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

Тогда вопрос для "ещё":
а какие могли бы быть варианты? Так, на вскидку.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
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

Если нужен именно двумерных вектор, то предыдущую конструкцию нужно завернуть в еще один вектор
Yandex
Объявления
09.09.2013, 10:27     Двумерный вектор из разных типов - возможно?
Ответ Создать тему
Опции темы

Текущее время: 12:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru