Итерация по объекту без определения next()
Предположим, у меня есть объекты в диапазоне (r1,r2]
Я хочу вставить как ключи к карте. У них нет определенного итератора / следующего, но есть оператор меньше чем. Как бы я это сделал:
template< class K, class V>
void foo( K r1, K r2, V val ) {
for(K key = r1; key < r2; ++key )
{
mMap.insert(make_pair(key,val));
}
}
Я не могу использовать ++key
,
K
может быть любого типа, который copyable
, assignable
имеет opertor<
но нет equality operator
а также arithmetic operators
,
2 ответа
Итерируемость ключа не имеет значения, карта реализует итерацию по набору ключей. Посмотрите что-нибудь близкое в Итерации через HashMap:
Map<String, Object> map = ...;
for (String key : map.keySet()) {
// ...
}
или ближе в Итеративных ключах на карте C++:
for(std::map<Key,Val>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter)
{
}
Вы можете использовать итератор из класса std::map
Вы получаете это с Begin
Вы можете написать цикл для этого итератора из типа std::map<type,type>::iterator
а затем использовать все ваши операторы, как ожидалось