unordered_map值对c ++

时间:2015-04-23 11:09:56

标签: c++ c++11 unordered-map std-pair keyvaluepair

我正在尝试在C ++中使用unordered_map,这样,对于键我有int,而对于值,有一对浮点数。但是,我不确定如何访问这对值。我只是想弄清楚这个数据结构。我知道要访问我们需要与此无序映射声明相同类型的iterator的元素。我尝试使用iterator->second.firstiterator->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 个答案:

答案 0 :(得分:2)

是的,这是正确的,但不要使用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循环

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