c ++ 11 — пара значений unordered_map Переполнение стека

Я пытаюсь использовать unordered_map в C ++, такой, что для ключа у меня есть intв то время как для значения есть пара с плавающей точкой. Но я не уверен, как получить доступ к паре значений. Я просто пытаюсь разобраться в этой структуре данных. Я знаю, чтобы получить доступ к элементам, которые нам нужны iterator того же типа, что и это неупорядоченное объявление карты. Я пытался с помощью iterator->second.first а также iterator->second.second, Это правильный способ сделать элементы доступа?

typedef std::pair<float, float> Wkij;
tr1::unordered_map<int, Wkij> sWeight;
tr1::unordered_map<int, Wkij>:: iterator it;
it->second.first     //  access the first element of the pair
it->second.second    //  access the second element of the pair

Спасибо за вашу помощь и время.

1

Решение

Да, это правильно, но не используйте tr1, записывать std, поскольку unordered_map уже является частью STL.

Используйте итераторы, как вы сказали

for(auto it = sWeight.begin(); it != sWeight.end(); ++it) {
std::cout << it->first << ": "<< it->second.first << ", "<< it->second.second << std::endl;
}

Также в C ++ 11 вы можете использовать диапазон для цикла

for(auto& e : sWeight) {
std::cout << e.first << ": "<< e.second.first << ", "<< e.second.second << std::endl;
}

И если вам это нужно, вы можете работать с std::pair как это

for(auto it = sWeight.begin(); it != sWeight.end(); ++it) {
auto& p = it->second;
std::cout << it->first << ": "<< p.first << ", "<< p.second << std::endl;
}
2

Другие решения


По вопросам рекламы [email protected]