Я пытаюсь использовать 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
Спасибо за вашу помощь и время.
Да, это правильно, но не используйте 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;
}