2016-11-29 1 views
-1

Предположим, у меня есть объект в диапазоне (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< но не и arithmetic operators.

+0

Как насчет 'std :: next'? – aschepler

+0

для этого мне понадобится итератор ключа 'K'. – has

+1

У 'std :: map' всегда есть итераторы. Я не уверен, что вы спрашиваете. – aschepler

ответ

1

Иерархия ключа не имеет значения, карта реализует итерацию по набору ключей. Смотрите что-то близкое в Iterate through a HashMap:

Map<String, Object> map = ...; 

for (String key : map.keySet()) { 
    // ... 
} 

или ближе в Iterate keys in a C++ map:

for(std::map<Key,Val>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) 
{ 

} 
+0

... или просто 'for (const auto & keyvalue: myMap) {... keyvalue.first ... keyvalue.second ...}' – rwols

+0

На самом деле я хочу вставить ключи из диапазона '(r1, r2]'. for (K key = r1; key has

+0

Спасибо, я немного ржавый - и не полностью плавая через новый синтаксис. @has, ваш вопрос очень неясен. Удалите любые ссылки на карту в своем вопросе и просто спросите, как итерации по целому ряду объектов без определенной итерации. – kabanus

0

Вы можете использовать итератор из класса станд :: Карта

вы получите его с Begin

вы может написать цикл for с этим итератором из типа std::map<type,type>::iterator , а затем использовать все свои операторы как ожидалось

Смежные вопросы