Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43

Как получить индекс текущего элемента вектора?

21.03.2023, 06:11. Показов 3137. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Как узнать индекс элемента вектора?

В Delphi есть ItemIndex.

Есть ли такой аналог в C++?

Visual Studio 2023
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2023, 06:11
Ответы с готовыми решениями:

Внести индекс текущего элемента comboBox в переменную
Нужно занести индекс текущего элемента comboBox в переменную для последующего выполнения условий. Решил для проверки вывести индекс в...

Внести индекс текущего элемента comboBox в переменную
Нужно занести индекс текущего элемента comboBox в переменную для последующего выполнения условий. Решил для проверки вывести индекс в...

Получить индекс текущего элемента, который выбран в Combobox
Привет ребят, проблема возникла, чего-то голова не переваривает :) Есть Combobox, с подгрузкой айтемов в него по нажатию на кнопку. ...

18
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.03.2023, 06:16
Цитата Сообщение от ps12 Посмотреть сообщение
Как узнать индекс элемента вектора?
Как вы узнали что это элемент вектора ?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 06:44  [ТС]
Нашел по наименованию.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13201 / 6836 / 1822
Регистрация: 18.10.2014
Сообщений: 17,294
21.03.2023, 06:46
Цитата Сообщение от ps12 Посмотреть сообщение
Как получить индекс текущего элемента вектора?
Что такое "текущий" элемент вектора?
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 06:54  [ТС]
Видимо вопрос очень сложный, объясняю по порядку.

У меня несть структура
C++
1
2
3
4
5
6
7
struct Objects
{
    unsigned int ID;
    unsigned int ObjectTypeID;
    unsigned int ParentID;
    HTREEITEM TreeItem;
};
Есть вектор
C++
1
std::vector <Objects> ObjectsList;
Есть процедура, которая заполняет вектор элементами.
Затем, по этому заполненному вектору, создается дерево объектов во ViewTree

При создании элемента дерева я хочу в свойство itemData записать индекс вектора, чтобы в дальнейшем не искать элемент вектора, а обращаться к нему по индексу.
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 07:11
ps12, можно искать в векторе при помощи std::find_if , если элементов немного (в районе 1000). Но если элементов много, и искать надо быстро, то лучше использовать std::map или std::unordered_map. У этих классов есть свой метод поиска find

Добавлено через 56 секунд
а завязываться на поиске с индексом вектора - неудачная мысль, вектор может поменяться, тогда все идексы придётся перезаписывать в элементах дерева
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 07:22  [ТС]
Значит придется делать поиск.
Спасибо.
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 08:10
ps12, а ещё вектор можно поддерживать в отсортированном виде. Тогда искать можно двоичным поиском (std::lower_bound)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.03.2023, 08:25
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а ещё вектор можно поддерживать в отсортированном виде.
Может дорого обойтись.
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 08:37
SmallEvil, маловероятно
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
21.03.2023, 09:27
Цитата Сообщение от ps12 Посмотреть сообщение
Видимо вопрос очень сложный
Вопрос не сложный, но в вашем посте не хватает данных для нормального ответа. Можно ответить как попало, или начать строить предположения, но не все это любят делать.

Цитата Сообщение от ps12 Посмотреть сообщение
При создании элемента дерева я хочу в свойство itemData записать индекс вектора
Покажите как у вас в коде выглядит "текущий элемент вектора".
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 10:30  [ТС]
Продолжение вопроса.

На основе вектора, на форме построено дерево.
Пользователь кликает на элемент, происходит поиск соответствующей строки в векторе

C++
1
2
3
4
5
6
7
8
9
10
            for (int i = 0; i < mf->ObjectList.size(); i++)
            {
 
                if (mf->ObjectList[i].TreeItem == Item)
                {
                                        SomeProc();
                    break;
                }
 
            }
Вопрос: как передать найденную строку вектора в другую процедуру?

Добавлено через 5 минут
Или передать в процедуру найденную структуру?
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 10:33
ps12,

C++
1
 SomeProc(mf->ObjectList[i]);
соответственно, аргумент функции должен быть

C++
1
void SomeProc(/*const*/ Objects& item)
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 11:02  [ТС]
А нельзя ли, при нахождении строки вектора, получить его индекс и передать его в процедуру ?

Например:

C++
1
2
3
4
5
6
7
8
9
10
11
            for (int i = 0; i < mf->ObjectList.size(); i++)
            {
 
                if (mf->ObjectList[i].TreeItem == Item)
                {
                    int index = mf->ObjectList[i].GetItemIndex;      //  как-то так получить индекс
                    SomeProc(index);
                    break;
                }
 
            }
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 11:07
ps12, можно юзерские данные достать по хендлу

CTreeCtrl::GetItemData
0
0 / 0 / 0
Регистрация: 20.11.2018
Сообщений: 43
21.03.2023, 11:14  [ТС]
Это пользовательские данные по элементу дерева, а мне надо передать в другую процедуру номер позиции в векторе, что бы обращаться к нему


C++
1
  int id= mf->ObjectList[INDEX].ID;
т.е. после нахождения строки в векторе, надо получить ее индекс.
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
21.03.2023, 12:19
ps12, да зачем тебе позиция в векторе? Передай копию элемента и всё
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.03.2023, 12:42
ps12, вас спросили неоднократно (причем люди имеющие репу не с фигу величиной) : какое конкретно представление имеет общая концепция
Цитата Сообщение от ps12 Посмотреть сообщение
элемента вектора
в вашем коде. Наверное эти люди понимают зачем они набирают в ваш адрес эти вопросы. Вы же упрямо игнорируете их. Элемент вектора может быть получен либо через ссылку на объект вектора (оператором индексного обращения, например), либо через итератор, либо через физический адрес. В первом случае вы имеете всё что нужно (адрес первого элемента нужен, неважно в виде указателя или итератора). Во втором случае, если у вас нет итератора начала или адреса внутреннего массива data (либо его элемента с известным индексом), то вы не сможете определить индекс интересующего вас элемента по его ссылке, любого рода.
Правда ещё и в том, что положение элемента в векторе (как физическое, так и относительное), это величина не постоянная. Тут можно легко обжечься. Поэтому, ps12, важно сначала выучить базовые свойства матчасти, перед тем как задавать вопросы вида: можно ли в элементе вектора найти обратную ссылку на объект контейнера, и пр.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
21.03.2023, 12:57
Цитата Сообщение от ps12 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
          for (int i = 0; i < mf->ObjectList.size(); i++)
          {
              if (mf->ObjectList[i].TreeItem == Item)
              {
                  int index = mf->ObjectList[i].GetItemIndex;      //  как-то так получить индекс
                  SomeProc(index);
                  break;
              }
          }
Цитата Сообщение от ps12 Посмотреть сообщение
Это пользовательские данные по элементу дерева, а мне надо передать в другую процедуру номер позиции в векторе, что бы обращаться к нему
В представленном коде номер позиции в векторе у вас и так есть - это i. Если вектор единожды сформирован и больше не меняется, то можете рассчитывать на то, что этот индекс всегда приведет к нужному элементу. Так в чем тогда проблема?
C++
1
2
3
4
5
6
7
8
            for (int i = 0; i < mf->ObjectList.size(); i++)
            {
                if (mf->ObjectList[i].TreeItem == Item)
                {
                    SomeProc(i);
                    break;
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2023, 12:57
Помогаю со студенческими работами здесь

дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора перед миним
дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора...

Как получить номер текущего элемента RecyclerView
Добрый день. Заполняю RecyclerView через адаптер из БД. Теперь хочу получить ID записи для редактирования Для элемента ListView делал...

Сбрасывается индекс текущего элемента в ComboBox
Если в обработчике CBN_EDITCHANGE или CBN_EDITUPDATE послать сообщение CB_SETCURSEL, то оно срабатывает как надо и последующий вызов...

Как получить HANDLE окна текущего элемента Active Desktop?
ПРОБЛЕМА!!! НУЖНО СРОЧНО ПОЛУЧИТЬ HANDLE ОКНА ТЕКУЩЕГО ЭЛЕМЕНТА ACTIVE DESKTOP (.HTM-ДОКУМЕНТА) СРЕДСТВАМИ DELPHI (WINAPI) БЛАГОДАРЮ...

Как получить индекс элемента в ListBox
Как получить индекс элемента списка : 1.по его значению (текст), 2.по его позициии (List, Column) ? Спасибо.


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru