The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Двухмерный вектор "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 00:32 
Подскажите как добавлять данные в двухмерный вектор?

// Создаем вектор
std::vector <std::vector <std::string> > MIX_DEV;

Я как туда push_back() ?!?

В инете нашел как создавать их, а вот как добавлять данные - не нашел.

Зарание спасибо,

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Двухмерный вектор "  
Сообщение от tx2 on 25-Окт-07, 02:28 
в таком духе...
вариант в лоб:

std::vector< std::vector< int > > test;

std::vector< int > v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
test.push_back(v1);
v1.clear();

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 02:54 
>[оверквотинг удален]
>вариант в лоб:
>
>std::vector< std::vector< int > > test;
>
>std::vector< int > v1;
>v1.push_back(1);
>v1.push_back(2);
>v1.push_back(3);
>test.push_back(v1);
>v1.clear();

Спасибо tx2, вышло.

Мне надо было бы что бы в первой мерности были к примеру string, а во второй int.
Но как я понимаю с векторами это не выйдет.
Есть ли идеи как это сделать?
А то придется переводить из string в int....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Двухмерный вектор "  
Сообщение от jd (??) on 25-Окт-07, 03:05 
>Мне надо было бы что бы в первой мерности были к примеру
>string, а во второй int.

Что вы имеете в виду? "В первой мерности" у вас вектора строк, во второй - строки...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Двухмерный вектор "  
Сообщение от phpcoder email(??) on 25-Окт-07, 08:26 
>Мне надо было бы что бы в первой мерности были к примеру string, а во второй int.

Может multimap использовать? Или не подойдёт?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Двухмерный вектор "  
Сообщение от jd (??) on 25-Окт-07, 02:50 

vector<vector<string>> vv;

vv.push_back(vector<string>());
vv[0].push_back("string 11");
vv[0].push_back("string 12");
vv.push_back(vector<string>());
vv[1].push_back("string 21");
vv[1].push_back("string 22");
vv[1].push_back("string 23");
vv.push_back(vector<string>());
vv[2].push_back("string 31");
vv[2].push_back("string 32");

for(int i=0; i<3; i++)
  for(int j=0; j<2; j++)
    cout<<vv[ i][j]<<endl;

С размерностями только осторожнее: строки (второй индекс) могут быть разных размеров.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 02:57 
>[оверквотинг удален]
>vv.push_back(vector<string>());
>vv[2].push_back("string 31");
>vv[2].push_back("string 32");
>
>for(int i=0; i<3; i++)
>  for(int j=0; j<2; j++)
>    cout<<vv[ i][j]<<endl;
>
>
>С размерностями только осторожнее: строки (второй индекс) могут быть разных размеров.

Спасибо jd, не успел ответить tx2 как тут еще один примерчик :)
Сейчас и это попробую для разнообразия )

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 03:03 
>[оверквотинг удален]
>>for(int i=0; i<3; i++)
>>  for(int j=0; j<2; j++)
>>    cout<<vv[ i][j]<<endl;
>>
>>
>>С размерностями только осторожнее: строки (второй индекс) могут быть разных размеров.
>
>Спасибо jd, не успел ответить tx2 как тут еще один примерчик :)
>
>Сейчас и это попробую для разнообразия )

С векторами разобрался, теперь вопрос как засунут разные типы данных в вектор, или как это можна сделать :)

Что-то типа такого:

std::vector< std::vector< int > > test;

std::vector< int > v1;
std::vector< std::string > v2;

v1.push_back(15);
v1.push_back(24);
v1.push_back(8);

v2.push_back("PCM");
v2.push_back("VOL");
v2.push_back("MIC");

test.push_back(v1);
test.push_back(v2);

Но это понятно не сработает.
Если ли какие-то способы?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Двухмерный вектор "  
Сообщение от jd (??) on 25-Окт-07, 03:18 
Насколько я понял суть задачи:

struct channel
{ string name;
  int value;
  channel(const string &n, int v): name(n), value(v) {}
};

//...
vector<channel> v;
v.push_back(channel("PCM", 15));
v.push_back(channel("VOL", 24));
v.push_back(channel("MIC", 8));

for(int i=0; i<3; i++)
  cout<<v[ i].name<<": "<<v[ i].value<<endl;

Хотя может и перемудрил чего - давно на C++ не писал...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Двухмерный вектор "  
Сообщение от DeadMustdie email(??) on 25-Окт-07, 09:30 
boost::variant поможет.

http://www.boost.org/doc/html/variant.html

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 17:24 
>>Мне надо было бы что бы в первой мерности были к примеру string, а во второй int.
>
>Может multimap использовать? Или не подойдёт?

Спасибо, как раз подошло!

http://www.cppreference.com/cppmap/all.html

Кусок моей  реализации (OSS /dev/mixer):

    std::multimap<std::string, int> ALL_MIX_DEV;

    // List of ALL avaible devices
    for (int i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
        ALL_MIX_DEV.insert(std::pair<std::string, int>(sound_device_names, i));
}
    
        for (std::multimap<std::string, int>::iterator it = ALL_MIX_DEV.begin(); it != ALL_MIX_DEV.end(); ++it) {
        std::cout << "  [" << (*it).first << ", " << (*it).second << "]" << std::endl;
}

....

                    std::pair<std::multimap<std::string, int>::iterator, std::multimap<std::string, int>::iterator> ppp;
                    ppp = ALL_MIX_DEV.equal_range(v[1]);
                    std::multimap<std::string, int>::iterator it2 = ppp.first;
                    
                    ioctl(mixer_fd, MIXER_READ((*it2).second), &level);
                    std::cout << std::setw(7) << (level & 0xff) << (level & 0xff) << std::endl;
                    
....


>[оверквотинг удален]
> //...
> vector<channel> v;
> v.push_back(channel("PCM", 15));
> v.push_back(channel("VOL", 24));
> v.push_back(channel("MIC", 8));
>
> for(int i=0; i<3; i++)
>  cout<<v[ i].name<<": "<<v[ i].value<<endl;
>
> Хотя может и перемудрил чего - давно на C++ не писал...

Не компилится че-то... :

f.vector.cpp: In function ‘int main()’:
f.vector.cpp:15: ошибка: в ‘main()::channel’ используется локальный тип ‘main()::channel’
f.vector.cpp:15: ошибка:   при конкретизации ‘template<class _Alloc> class std::allocator’
f.vector.cpp:15: ошибка: некорректный аргумент шаблона 2
f.vector.cpp:15: ошибка: invalid type in declaration before ‘;’ token
f.vector.cpp:16: ошибка: запрос элемента ‘push_back’ в ‘v’, имеющего не классовый тип ‘int’
f.vector.cpp:17: ошибка: запрос элемента ‘push_back’ в ‘v’, имеющего не классовый тип ‘int’
f.vector.cpp:18: ошибка: запрос элемента ‘push_back’ в ‘v’, имеющего не классовый тип ‘int’
f.vector.cpp:21: ошибка: некорректные типы ‘int[int]’ для индекса массива
f.vector.cpp:21: ошибка: некорректные типы ‘int[int]’ для индекса массива

> boost::variant поможет.
> http://www.boost.org/doc/html/variant.html

Я в C++ еще новичок, и Boost для меня за сложно....
Но спасибо, когда созрею перепишу на нем :)

Большое спасибо всем за помощь!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 25-Окт-07, 17:29 
>http://www.cppreference.com/cppmap/all.html

Ой, перепутал ссылку. Вот брал от сюда:

http://www.yolinux.com/TUTORIALS/CppStlMultiMap.html

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Двухмерный вектор "  
Сообщение от jd (??) on 26-Окт-07, 06:32 
>f.vector.cpp: In function ‘int main()’:
>f.vector.cpp:15: ошибка: в ‘main()::channel’ используется локальный тип ‘main()::channel’
>f.vector.cpp:15: ошибка:   при конкретизации ‘template<class _Alloc> class std::allocator’
>...

Имелось в виду что-то вроде:


#include <vector>
#include <string>
#include <iostream>

using namespace std;

struct channel
{ string name;
  int value;
  channel(const string &n, int v): name(n), value(v) {}
};

int main()
{ vector<channel> v;
  v.push_back(channel("PCM", 15));
  v.push_back(channel("VOL", 24));
  v.push_back(channel("MIC", 8));

  for(int i=0; i<3; i++)
    cout<<v[ i].name<<": "<<v[ i].value<<endl;

  return 0;
}

И оно прекрасно компиляется и работает.

А если уж использовать ассоциативный массив, то не multimap, а map, так как в первом возможно существование двух элементов с одним ключём (ключ у вас - это название канала), а это не ваш случай. Но одна из основных идей использования map - это обращение (поиск) к элементу по ключу. То есть для приведённого кода, что-то вроде ALL_MIX_DEV["PCM"] (для получения или установки соответствующего значения для канала PCM, например).

А вообще, лучше всего почитать Страуструпа, чтобы делать осознанный выбор. STL там довольно хорошо описан.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Двухмерный вектор "  
Сообщение от siegerstein email(??) on 26-Окт-07, 15:38 
>[оверквотинг удален]
>А если уж использовать ассоциативный массив, то не multimap, а map, так
>как в первом возможно существование двух элементов с одним ключём (ключ
>у вас - это название канала), а это не ваш случай.
>Но одна из основных идей использования map - это обращение (поиск)
>к элементу по ключу. То есть для приведённого кода, что-то вроде
>ALL_MIX_DEV["PCM"] (для получения или установки соответствующего значения для канала PCM, например).
>
>
>А вообще, лучше всего почитать Страуструпа, чтобы делать осознанный выбор. STL там
>довольно хорошо описан.

Спасибо, да компилится...
Я как раз тоже поменял с multimap на map...

Теперь имею два варианта решения проблемы :)

Спасибо за помощь, jd!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру