C++

2016-04-14 12 views
-1

'da bir STL Haritasının bir alt kümesinde yineleme nasıl yapılır? Sadece bir Stl haritasının bir bölümünde yinelemeyi ve standart geçişte olduğu gibi baştan sona nasıl devam edeceğini anlamıyorum. Sorun Yineleyici için döngü söz dizimi ile ve özellikle de ilgili olduğunu düşünüyorumC++

auto end = temp_map.rbegin() + THRESHOLD_NUM; 

    for (auto rit = temp_map.rbegin(); rit != end; ++rit) 
    { 
     int s = rit->second; 

     for (int k = 0; k < MAX_ROWS; k++) 
     { 
      array_dist_it[k] = abs(input[k] - input_matrix[k][s]); 
     } 

     float av_real = mean(MAX_ROWS, array_dist_it); 

     float score_real = score_func(av_real); 

     rank_function(score_real, s); 
    } 
} 

: İşte benim kodudur. Hata, geçersiz bir operatörle ilgilidir.

+0

olurdu kullanma. Olanaklardan geçtin mi? Ne düşünüyorsun, yanlış mı düşünüyorsun? Düzeltmek için ne denediniz? Başka hangi yaklaşımlar işe yarıyor olabilir? Bunları denedin mi? Hangi araştırma materyalini incelediniz ve neden önerilen yaklaşımların sizin durumunuz için uygun çözümler olmadığını düşünüyorsunuz? Yığın Taşması, * düşünce * için bir değişiklik değildir; en azından, iyi olmamalı. –

+0

"yanlış bir şey var" Ne yanlış? –

+0

Eğer kendimi kötü bir şekilde açıklamış olsaydım, aklıma gelen tüm olasılıkları denediğim için, hata elbette yineleyiciye bağlıdır. Kendimi haklı çıkarmak için değil, seninle çözümler istemek için burada değilim. Açıkçası ben sormadan önce diğerlerinin olasılıklarını aradım. Senin amacını tam olarak anlamadım. Eğer sizin için sorularım önemsiz ise başka bir nokta. – CIVI89

cevap

1

A std::map, BidirectionalIterator hizmetine sahiptir. Arttırma ve azaltmayı destekler, ancak toplama veya çıkarma işlemini desteklemez. İlerleyen ve N kez yineleyici gerekiyorsa o zaman std::next kullanabilirsiniz. yerine

auto end = temp_map.rbegin() + THRESHOLD_NUM; 

Bu bir kitle kaynaklı hata ayıklama platformu değildir

auto end = std::next(temp_map.rbegin(), THRESHOLD_NUM); 
+0

Kendi bağlantınıza tıklayın: 'std :: advance' void' dönüş türüne sahiptir. Ayrıca, tsk tsk konu dışı soruları yanıtlama (bu bir MCVE ile potansiyel olarak kabul edilebilir (önemsiz) olsa da). –

+0

@LightnessRacesinOrbit Yanlış işlevi kullandım ve 'std :: next' komutunu kullanmak için cevabı düzelttim. Geri kalanı gittiği sürece, 'auto end = temp_map.rbegin() + THRESHOLD_NUM; 'bir hatadır. – NathanOliver

+1

Ne kadar açık olduğu alakasız. Biz burada kalite Q & A oluşturmaya çalışıyoruz, burada OP bile hata mesajı yazmamış olduğu konu dışı sorularda sunulan koddaki bariz kusurları tahmin etmede FGITW potshots alamıyor. Bu soru en ufak bir şekilde araştırılamaz, bu nedenle Yığın Taşması konusunda “yararlı” sayılmaz ... ve bu nedenle, tahmin edilen cevaplarla teşvik edilmemelidir./Önerilen çözümünüzü düzenlediğiniz için teşekkür ederiz. –