2016-04-05 21 views
-1

değerindeki artış hızınıza yardım ederseniz yardımınıza ve daha iyisine ihtiyacınız var. Bu çok önemsiz bir sorundur ama yine de tek bir satıra koymak için tam olarak neye ihtiyacım olduğunu anlayamıyorum.Bir harita değerini

Aşağıdaki kod i ne

for (busRequest = apointCollection.begin(); busRequest != apointCollection.end(); busRequest++) 
{ 
    double Min = DBL_MAX; 
    int station = 0; 

    for (int i = 0; i < newStations; i++) 
    { 

     distance = sqrt(pow((apointCollection2[i].x - busRequest->x1), 2) + pow((apointCollection2[i].y - busRequest->y1), 2)); 
     if (distance < Min) 
     { 
      Min = distance; 
      station = i; 

     } 
    } 

    if (people.find(station) == people.end()) 
    { 
     people.insert(pair<int, int>(station, i)); 
    } 

    else 
    { 
     how can i increment "i" if the key of my statation is already in the map. 
    } 

} 

Sadece kısaca var, ben ilk istasyonu almak ikinci döngü gidip minimum mesafeyi bulmak busrequest ilk alır. İkinci döngüyü geçtikten sonra, o istasyonu benim haritama minimum mesafeyle ekliyorum. Ben tüm döngüleri ile devam ettikten sonra ve aynı istasyon varsa, onu artırmak gerekir, bu yüzden bu istasyon iki kez ve vb. Kullanıyor demektir

Bana sadece ipucu ver veya hat ver eklemem gerek.

Size şimdiden teşekkür ederim ve yardımlarınızı bekliyorum.

+0

YourMap [YourKey] ++ –

+0

teşekkürler !!!! Bana çok yardımcı oldunuz! –

+0

:) Yardım ettiğime sevindim. Bir cevaba koyacağım lütfen cevap olarak işaretleyin. –

cevap

1

Ve ben i yerine Min Distance kastettiniz? Kontrol et ve bana haber ver.

for (busRequest = apointCollection.begin(); busRequest != apointCollection.end(); busRequest++) 
{ 
    double Min = DBL_MAX; 
    int station = 0; 

    for (int i = 0; i < newStations; i++) 
    { 

     distance = sqrt(pow((apointCollection2[i].x - busRequest->x1), 2) + pow((apointCollection2[i].y - busRequest->y1), 2)); 
     if (distance < Min) 
     { 
      Min = distance; 
      station = i; 

     } 
    } 

    if (people.find(station) == people.end()) 
    { 
     people.insert(pair<int, int>(station, i)); // here??? 
    } 

    else 
    { 
     // This routine will increment the value if the key already exists. If it doesn't exist it will create it for you 
     YourMap[YourKey]++; 
    } 

} 
+0

ilk adım bana söylesin lütfen (otomatik o people.begin() =;! o = people.end(); o ++) << it-> ilk << ";" << it-> ikinci << endl cout \t { \t \t; \t} Kimlik 0 istasyon sayısına sahipse, bu kimlik daha önce kullandığım istasyona karşılık geliyor mu? –

+0

@mishaOstapchuk'unuzu orijinal yayınınızı düzenleyin. Yeni kodu, yeni soru, yeni bir hata (varsa) koydu ve ben burada cevap vereceğim. Sonunda gönderdiğim Stack Overflow –

+0

bu deseni takip edin, bunun kuralların dışında olduğunu biliyorum ama bugün bir soru gönderemiyorum. –

0

C++ 'da, eklemeden bir harita anahtarına doğrudan erişebilirsiniz. C++ otomatik olarak varsayılan değerle oluşturur. Bir stationpeople haritası mevcut değildir ve people[station] ardından people[station] otomatik 0 olarak ayarlanır erişecek eğer durumda , (int varsayılan değeri 0 ise).

Yani sadece bunu yapabilirsiniz: Ayrıca

if (people[station] == 0) 
{ 
    // Do something 
    people[station] = station; // NOTE: i is not accessible here! check ur logic 
} 
else 
{ 
    people[station]++; 
} 


: insanlar map içine koşul eklemek için EĞER Kodunuzda i içeride erişilemiyor.

+0

i Min = dbl_max'i kullandığım ilk döngüden sonra int i = 1 ekledim. Ve anahtarım minimum mesafeye sahip istasyona karşılık gelmelidir. Eğer 75 numaralı istasyona sahip olursam, bu istasyonun haritanızda tekrar görünmesi halinde artması gerekir demektir –

+0

Hayır, siz yapmadınız. En azından kodunda bunu göremiyorum. –

+0

evet, koduyla göndermedim. Bunun için özür dilerim –