Как найти индекс элемента в отсортированном векторе, учитывая указатель на этот элемент - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть вектор std::vector<MyClass> vec. Я пытаюсь отсортировать вектор, а затем найти индекс элемента с указателем на него

sort(vec.begin(), vec.end(), ...);
auto index = myPointer - &vec[0];

Я заметил, что значение index не изменяется при сортировке вектора и, следовательно, неверно. Есть ли способ напрямую получить правильный индекс?

1 Ответ

1 голос
/ 25 апреля 2019

Стандарт требует, чтобы RandomIt сортировки удовлетворял требованию ValueSwappable , что означает использование std::iter_swap для обмена элементами во время сортировки.Ваш адрес указателя не будет изменен, если он указывает на 2-й элемент перед сортировкой, он все равно будет указывать на 2-й элемент после сортировки, но 2-й элемент был изменен после сортировки большую часть времени.Вам нужно использовать equal_range, чтобы получить новый адрес указателя после сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...