Как извлечь записи с тем же префиксом в C ++ карте?

0

Теперь я знаю только, что на одной карте есть несколько записей с одним и тем же префиксом "head_". Как извлечь все эти записи, если я не знаю их точных ключей на этой карте? Есть идеи?

  • 3
    Итерируйте их. Чтобы найти их эффективно, попросите map.lower_bound("head_") затем итерируйте, пока не найдете первый ключ, который не соответствует.
  • 0
    @JerryCoffin Как бы вы указали свой аргумент для equal_range чтобы дать вам все с префиксом «head_»?
Показать ещё 1 комментарий
Теги:
map

1 ответ

2
Лучший ответ

Вам придется прокручивать карту. Однако вы можете std::map::lower_bound найти свою отправную точку, вызвав std::map::lower_bound с ключом, равным вашему желаемому префиксу.

void extract_keys(const std::map<std::string, int>& some_map){
    auto iter = some_map.lower_bound("head_");

    while (iter->first.find("head_") == 0){
        //do things with key, value pair
        ++iter;
    }
}

Код выше должен работать, но я признаю, что не тестировал его. (Любые ошибки должны быть тривиально фиксируемыми)

  • 0
    Я думаю, что могу использовать map.lower_bound ("head_") и map.upper_bound ("head_"), чтобы найти диапазон.
  • 1
    @city Нет, ты не можешь. Вы можете использовать upper_bound("head_zzzzzzz") если можете предположить, что самый длинный действительный ключ не будет содержать больше Z, чем любая строка, которую вы используете для поиска, но тогда вам все равно придется перебирать эти два итератора.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню