Могу ли я перебрать диапазон ключей 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++ для документации о том, как эти методы работают.
Получив итераторы для ближайшего ключа, вы можете выполнять итерацию как обычно.