The OpenNET Project / Index page

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

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

"Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от DDG (ok) on 20-Май-08, 16:16 
Здравствуйте! Прошу прощения, тема поднималась, она мне помогла но не все понятно!
Имею:
struct TableMatrix
{
  String ColName;
  String Value;
  TableMatrix(const String &cn, String v): ColName(cn), Value(v) {}
};

vector<vector<TableMatrix> > my_table;

Далее в цикле заполняю:

My_table[row].push_back(TableMatrix(i,j));

где i- название столбца, j-его значение в строке, row-номер строки.

В итоге имею матрицу типа:

String v= my_table[Row][Col].Value;
String c= my_table[Row][Col].ColName;

Т.е имею привязку - Название столбца/номер строки/содержимое ячейки
Все хорошо, за исключением того что не получается применить ни одну функцию
т. е.
max_element(my_table[0].Value.begin(), my_table[0].Value.end()); естес-но не работает
т.е алгоритм begin не понимает переменную типа my_table[0].Value.

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

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

 Оглавление

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


1. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от NuINu (??) on 20-Май-08, 16:56 

>т. е.
>max_element(my_table[0].Value.begin(), my_table[0].Value.end()); естес-но не работает
>т.е алгоритм begin не понимает переменную типа my_table[0].Value.
>
>Можно не использовать структуру, и название столбца брать по индексу, то все
>работает, но мне хотелось бы именно так.
>Простите если описал все не очень понятно...За ранее благодарен....

Знаешь, я бы начал с изменения названий!
то что в самом начале у тебя называется TableMatrix, можно назвать как нибудь по скромнее, и по понятнее, типа Cell
Иногда простое переименование переменных и типов может во многом упростить программирование.

ну а что касается:
>max_element(my_table[0].Value.begin(), my_table[0].Value.end()

так это ты просто не туда применяешь методы шаблона Vector
пытаясь вызвать итератор у объекта строка.(хотя кажеться, Value и быть не должно)
напиши что нить подобное:
max_element(my_table[0].begin(), my_table[0].end())

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

2. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от DDG (??) on 21-Май-08, 09:59 
>напиши что нить подобное:
>max_element(my_table[0].begin(), my_table[0].end())

Спасибо, пробовал, но не так и даже не так не компилится:

max_element(my_table.begin(), my_table.end());

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

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

3. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от NuINu (??) on 21-Май-08, 14:15 
>>напиши что нить подобное:
>>max_element(my_table[0].begin(), my_table[0].end())
>
>Спасибо, пробовал, но не так и даже не так не компилится:
>
>max_element(my_table.begin(), my_table.end());
>
>Ошибок синтаксиса не показывает, но вылетает при обращении к функции(), т.е. видимо
>нельзя использовать функции со струтурными типами данных.
>Нужно научиться обращаться именно ко значению внутри структуры...

а что это за функция max_element ?
что ей на вход должно поступать?
насколько я помню, my_table.begin() должен возвращать итератор, проходящий по контейнеру.

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

4. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от phpcoder email(??) on 21-Май-08, 14:37 
>а что это за функция max_element ?

Стандартный алгоритм: http://cppreference.com/cppalgorithm/max_element.html

>что ей на вход должно поступать?

Два итератора.

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

5. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от anonymous (??) on 21-Май-08, 15:26 
И ещё у элементов вектора должен быть определён operator<

Иначе как она выяснит, какой из элементов вектора больше?  (У неё нет искусственного интеллекта чтобы догадаться самой полезть вовнутрь структуры)

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

6. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от NuINu (??) on 21-Май-08, 16:10 
>И ещё у элементов вектора должен быть определён operator<
>
>Иначе как она выяснит, какой из элементов вектора больше?  (У неё
>нет искусственного интеллекта чтобы догадаться самой полезть вовнутрь структуры)

да, и теперь становиться понятно почему все это не работает, а заодно и недостаток
структуры, в которой теперь придеться Value постоянно преобразовывать, в числовое значение.

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

7. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от AMDmi3 (??) on 21-Май-08, 21:50 
>vector<vector<TableMatrix> > my_table;

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

>String v= my_table[Row][Col].Value;
>String c= my_table[Row][Col].ColName;
>
>т.е алгоритм begin не понимает переменную типа my_table[0].Value.

Такого вообще не существует.

my_table[0] - это vector<TableMatrix>, у него, разумеется, нет никаких .Value.

>Можно не использовать структуру

Если ты собираешься использовать стандартные алгоритмы, надо как минимум определить operator < для TableMatrix, или передавать в max_element функтор, сравнивающий твои структуры.

> max_element(my_table.begin(), my_table.end());

В твоем vector<vector<TableMatrix> > это СРАВНИВАЕТ ВЕКТОРА!!!

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

8. "Двумерный вектор из структуры. Как исп. функции?"  
Сообщение от DDG (??) on 22-Май-08, 09:38 
Спасибо всем ответившим!
Наконец-то мне подсказали как это сделать. Оказалось все просто.
Напишу этот метод как вытащить данные из такой конструкции:

Создаем следующую функцию:

bool compare_value(const TableMatrix& x, const TableMatrix& y)
{return (x.Value < y.Value);}

Создаем итератор:

vector<TableMatrix>::iterator iterator;


    iterator= max_element(my_table[0].begin(), my_table[0].end(), compare_value);

    String str1= iterator->Value;
    String str2=iterator->ColName;

подобное описано в msdn.  

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

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

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




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

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