C ++: возможно ли найти вектор / контейнер для определенной строки / значения и вернуть его индекс? - PullRequest
0 голосов
/ 01 марта 2011

Буду признателен за советы по работе с данными в векторах.

Я написал код, который приводит к двум наборам векторов: строки (метки / имена) и двойники (данные). Порядок меток в строковом векторе может быть разным для каждого вычисления, которое я делаю.

Вот что я хотел бы сделать. Скажем, один элемент (метка) в векторе - это Том. Я хотел бы знать, возможно ли найти вектор строки / метки для «Тома» и вернуть индекс местоположения Тома в векторе.

Возможно ли это в C ++? Буду признателен за любые советы. Спасибо.

Ответы [ 3 ]

7 голосов
/ 01 марта 2011

Использование std::find

vector<string>::iterator it = std::find(vec.begin(), vec.end(), "Tom");
if (it == vec.end()) 
    return -1;
else
    return it - vec.begin();

Лучшим решением было бы выбрать более подходящий контейнер, такой как упомянутый std::map

7 голосов
/ 01 марта 2011

Вы должны использовать std::map для этого.

1 голос
/ 01 марта 2011

Как говорит Висси - вам действительно нужен ассоциативный массив

Если вам нужно использовать векторы, вы можете отсортировать вектор, а затем использовать одну из функций std :: find для возврата итератора, то есть указателя на позицию.

пс. Вы говорите, у вас есть два вектора? Предположительно, вы хотите держать их в порядке, а это означает, что сортировка только строк будет плохой. Возможно, вам нужен контейнерный класс, который имеет строку и значение - вектор, из которого можно отсортировать

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