2015-11-18 4 views
-2

У меня есть строка, которая является й = 5 и я сращен его х 5 затем объявить картупочему он дал случайное значение от карты

map<string, double> variableMap; 

я поместить их в использование карты

variableMap.insert(make_pair(splitString.at(0), stod(splitString.at(1)))); 

splitString.at(0) будет й и stod(splitString.at(1)) будет 5

, но когда я пытался получить значение из ключа находит с помощью

    map<string, double>::iterator iter; 

       iter = variableMap.find("x"); 

        cout << iter->second<<endl; 

печатает 6.95321e-310

это действительно странно

+0

Вы могли бы опубликовать некоторый фрагмент кода? –

+0

Отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). –

+0

вы должны проверить 'iter! = VariableMap.end()' перед использованием '->' на нем –

ответ

1

Скорее всего, вы получили splitString неправильно, так что карта не действительно содержат ключ «х». Перед использованием вы должны проверить результат поиска для равенства с variableMap.end().

iter = variableMap.find("x"); 
if(iter == variableMap.end()) { 
    // not found ... 
} 

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

Вы также можете распечатать его, чтобы проверить, что он содержит:

for(auto elem : variableMap) { 
    std::cout << ">"<<elem.first << "< " << elem.second << std::endl; 
} 

Edit: а ваша проблема действительно пустое пространство, рассматривать не писать строки со строками себя, но вместо того, чтобы смотреть на верхние ответы на C++ - Split string by regex

+0

да, когда i useif (iter! = VariableMap.end()) { cout second; } он ничего не печатает. так что я думаю, вы правы. ключ не может содержать на карте. Я проверяю, если строка содержит пробел –

+0

yup, это вопрос белого пространства, i splitString неправильно. большое спасибо! –

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