Итерация по объекту без определения 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 а затем использовать все ваши операторы, как ожидалось

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