在地图上使用迭代器

时间:2015-03-16 23:16:57

标签: c++ stl

map<double, LatLon> closestPOI; 
map<double, LatLon> ::iterator iterPOI = closestPOI.begin();

我做了一棵由两点之间的距离键入的树。我需要找到这棵树中最小的3个点(3个最小距离)。我声明了一个迭代器并将其初始化为指向根(我不确定这是否有必要,但它没有解决我的问题)。我尝试使用advance(iterPOI,1)来增加迭代器,但这也不起作用。如何找到这3个点并访问它们的值?

注意:是的我知道我想要的3个节点是根和它的孩子(因为它们的距离最小)

3 个答案:

答案 0 :(得分:0)

通常使用for()循环来迭代地图:

for(map<double, LatLon> ::iterator iterPOI = closestPOI.begin();
    iterPOI != closestPOI.end();
    ++iterPOI) {
    // access the iterator's key: iterPOI->first ...
    // access the iterator's value: iterPOI->second ...
}

答案 1 :(得分:0)

要遍历地图,您可以执行以下操作:(假设您使用的是gcc 4.8.2以上的任何内容)

map<double, LatLon> closestPOI;
// if you don't have gcc 4.8.2 then do what you did with the iterator in your question...

for(auto i_poi = closestPOI.begin(); i_poi != closestPOI.end(); ++i)
{
    // to get at the double you do: i_poi->first
    // to get at the LatLon you do: i_poi->second 
}

希望有所帮助

答案 2 :(得分:-1)

这是获取地图的第一个(即最小的键)三个元素的示例。我将LatLong别名int作为示例,所以you can see it in action here

#include <iostream>
#include <map>
#include <vector>

using LatLon = int;

int main()
{
    std::map<double, LatLon> map { { 1.0d, 1 }, { 2.0d, 2 }, { 3.0d, 3 }, { 0.5d, 4 } };

    // Get the three closest points and store them in a vector
    std::vector<LatLon> closest;
    for ( const auto& pair : map ) {
        if ( closest.size() >= 3 )
            break;
        closest.push_back(pair.second);
    }

    // Do something with the three closest points
    for ( auto latlon : closest )
        std::cout << latlon << '\n';

    return 0;
}

请注意,如果地图中的点数少于3个,则closest向量的元素数也会少于3个。