2016-04-05 2 views
-1

нужна ваша помощь и лучше, если вы можете помочь мне быстро. Это очень тривиальная проблема, но до сих пор не могу понять, что именно мне нужно вставить в одну строку.Приращивание значения карты

Следующий код у меня есть

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. 
    } 

} 

лишь вкратце, что я делаю, я взять первый busrequest идти на второй цикл взять первую станцию ​​и найти минимальное расстояние. После того, как я перехожу во второй цикл, я добавляю эту станцию ​​с минимальным расстоянием до моей карты. После того, как я продолжу все мои циклы, и если есть одна и та же станция, мне нужно увеличить ее, поэтому это означает, что эта станция использует два раза и т. Д.

Мне нужна помощь, просто дайте мне подсказку или укажите строку что мне нужно добавить.

Я благодарю вас заранее и жду вашей помощи.

+0

YourMap [YourKey] ++ –

+0

спасибо !!!! Ты мне очень помог! –

+0

:) рад, что помог. Я отвечу на него, пожалуйста, отметьте это как ответ. –

ответ

1

И я думаю, вы имели в виду Min Distance вместо i? Проверьте и дайте мне знать.

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

Первый шаг скажите мне, пожалуйста, если я использовать после того, как петли для (авто он = people.begin (!), Это = people.end(), она ++) \t { \t \t соиЬ << it-> первая << ";" << it-> второй << End L,; \t} Если id 0 имеет номер станции, соответствует ли этот идентификатор используемой ранее станции? –

+0

@mishaOstapchuk Редактировать исходное сообщение. Поместите здесь новый код, новый вопрос, новую ошибку (если есть), и я отвечу здесь. Следуйте этому шаблону в переполнении стека –

+0

, который я разместил в конце, я знаю, что это вне правил, но я не могу опубликовать вопрос сегодня. –

0

В C++ вы можете напрямую получить доступ к ключу карты, не вставляя его. C++ автоматически создаст его со значением по умолчанию. В вашем случае, если station нет в people карте, и вы получите доступ к people[station], тогда people[station] будет автоматически установлен на 0 (значение по умолчанию int равно 0).

Таким образом, вы можете просто сделать это:

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


также: В коде i не могут быть доступны внутри IF условие для вставки в людей карту.

+0

Я добавил int i = 1 после первого цикла, где я использую Min = dbl_max. И мой ключ должен соответствовать станции, которая имеет минимальное расстояние. Это означает, что если у меня есть номер станции 75, она должна увеличиваться после того, как эта станция снова появится на моей карте. –

+0

Нет, вы этого не сделали. Я не вижу этого в вашем коде, по крайней мере. –

+0

да я не отправил его с кодом. Простите за это –

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