Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сопоставить итему ListView элемент вектора 
:(
    Опции темы
Нитонисе
Дата 1.2.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Есть компонент ListView (vsReport) с некоторым набором колонок. И есть вектор, где хранятся, в сущности, те же данные, что и в итемах ListView. Нужно сопоставить каждому итему каждый элемент вектора. Причем последовательность итемов в ListView и элементов в векторе может быть разная (именно поэтому сложности с определением соответствия). Это нужно для того, чтобы, например, удаляя итем из ListView я сразу определял и какой элемент мне надо удалить из вектора. Либо удаляя итем из вектора я сразу бы определял какой мне итем надо удалить из ListView. Как настроить такую связь?
PM MAIL   Вверх
xvr
Дата 1.2.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  1.2.2011,  13:08 Найти цитируемый пост)
Как настроить такую связь?
Использовать не вектор, а std::map с ключем (строкой) из item'а из ListView


PM MAIL   Вверх
Нитонисе
Дата 1.2.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @ 1.2.2011,  13:47)
Использовать не вектор, а std::map с ключем (строкой) из item'а из ListView

То есть у каждого итема должно быть уникальное поле данных вроде ID?
Так это не удобно. Придется же для сопоставления в цикле перебирать все данные контейнера в поисках нужного ID. У меня так сейчас это и реализовано, но это же громоздко. Только я все же использую вектор (вектор структур). Одно их полей данных этой структуры - ID.

Хотелось быть нечто наподобие
Код

ListView1->Selected->DeleteData(); // удаление связанного элемента из контейнера, обращение прмое, без проверки ID в цикле
ListView1->Selected->Delete(); // удаление самого итема из листвью

PM MAIL   Вверх
xvr
Дата 1.2.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @ 1.2.2011,  14:52)
Цитата(xvr @ 1.2.2011,  13:47)
Использовать не вектор, а std::map с ключем (строкой) из item'а из ListView

То есть у каждого итема должно быть уникальное поле данных вроде ID?

Да
Цитата

Так это не удобно. Придется же для сопоставления в цикле перебирать все данные контейнера в поисках нужного ID. 
Нет. map позволяет извлекать и удалять данные по ключу без поиска

Цитата

Хотелось быть нечто наподобие
Код

ListView1->Selected->DeleteData(); // удаление связанного элемента из контейнера, обращение прмое, без проверки ID в цикле
ListView1->Selected->Delete(); // удаление самого итема из листвью

Так приблизительно и будет (пусть для примера ID будет текст элемента)
Код

std::map<AnsiString,SomeData> assoc_data;


assoc_data.erase(ListView1->Selected->ItemText);

PM MAIL   Вверх
Нитонисе
Дата 2.2.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  1.2.2011,  22:15 Найти цитируемый пост)
Нет. map позволяет извлекать и удалять данные по ключу без поиска

Хорошо. При случайном выборе итема в листвью по ID (что является ключом в мэп) я легко нахожу нужный мне элемент в контейнере, несмотря на различную сортировку в листвью и контейнере. Но как производить обратную связь? То есть при переборе данных в мэп мне нудо точно знать какому итему та или иная запесь соответствует. Хранить данные в виде структуры, одно из полей которых - это ссылка на TListItem?
PM MAIL   Вверх
xvr
Дата 2.2.2011, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  2.2.2011,  14:29 Найти цитируемый пост)
Хранить данные в виде структуры, одно из полей которых - это ссылка на TListItem? 

Угу, при условии, что указатели на TListItem не меняются при манипуляции с ListView (я это не исследовал за ненадобностью)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.