map<double, LatLon> closestPOI;
map<double, LatLon> ::iterator iterPOI = closestPOI.begin();
我做了一棵由两点之间的距离键入的树。我需要找到这棵树中最小的3个点(3个最小距离)。我声明了一个迭代器并将其初始化为指向根(我不确定这是否有必要,但它没有解决我的问题)。我尝试使用advance(iterPOI,1)来增加迭代器,但这也不起作用。如何找到这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个。