Могу ли я перебрать диапазон ключей std::map, даже если граничные ключи не существуют?

У меня есть std::map<int, object>,

Если карта содержит:

std::pair<1, obj1>
std::pair<3, obj2>
std::pair<4, obj3>
std::pair<6, obj4>
std::pair<8, obj5>
std::pair<9, obj6>
std::pair<14, obj7>

Могу ли я выполнить итерацию по этой карте по несуществующим ключам, таким как i=5..10 (учитывая, что на самом деле на карте нет клавиш 5 и 10)? Я хотел бы использовать такие значения, чтобы получить вывод, такой как:

std::pair<6, obj3>
std::pair<8, obj3>
std::pair<9, obj3>

Кроме того, есть ли другой контейнер, который может сделать это? Я не хотел бы использовать вектор, потому что в моей программе есть потенциально большие промежутки между ключами, которые на самом деле содержат значения, и я не хочу выполнять итерации по тысячам пустых индексов, например, когда есть только несколько элементов.,

1 ответ

Решение

Вы можете использовать lower_bound() а также upper_bound() методы std::map найти итератор для ближайшего значения данного ключа. Консультируйтесь со своей книгой C++ для документации о том, как эти методы работают.

Получив итераторы для ближайшего ключа, вы можете выполнять итерацию как обычно.

Другие вопросы по тегам