std::map
имеет свою собственную функцию-член lower_bound для того, что вы хотите сделать. Вы можете использовать std :: map :: lower_bound , чтобы получить свою начальную позицию, а затем выполнить сравнение префикса для последующих итераций:
for (auto it = lookup_map.lower_bound(prefix);
it != std::end(lookup_map) && it->first.compare(0, prefix.size(), prefix) == 0;
++it)
{
...
}
Это будет более эффективно, чем итерация каждого один ключ Преимущество в этом случае использования lower_bound()
состоит в том, что он вернет первый элемент, который эквивалентен или после поискового запроса. Так что если ваш поисковый термин «aa» и у вас есть запись «aab» на вашей карте, lower_bound () вернет итератор в «aab». Я думаю, что это будет более полезно в вашем случае, потому что вы хотите искать по префиксу.