问题描述
在这篇文章中Convert a multi_key map into a "normal" map joining the multiple keys
他们建议如何通过将第一个值传递给第二个值来将多映射转换为映射。我在我的代码中尝试过,但它不起作用:
multimap<double,Point>::iterator it;
for(it = _mapIntersectionVertices.begin(); it != _mapIntersectionVertices.end(); ++it)
{
_mapNewPoints[it->first].insert(it->second);
}
我收到错误 “'Point' 中没有名为 'insert' 的成员” 我不知道为什么,我没有尝试调用方法,只是按照帖子中的示例进行操作。作为附带的事情,我对他们使用相同的地图迭代器和 for 内的多地图这一事实不太满意,但是当使用地图迭代器 it2 来代替时:
_mapNewPoints[it2->first].insert(it->second)
没有任何变化
在我试图填写的某个类中有以下属性。
multimap<double,Point> _mapIntersectionVertices;
map<double,Point> _mapNewPoints;
而 Point 类是:
class Point
{
private:
Vector2d _coordinates; //using Eigen library
public:
int _label;
Point(const double x = 0.0,const double y = 0.0);
Point(Vector2d coordinates);
void setCoordinates(const double x,const double y) {_coordinates(x,y);}
const Vector2d& getCoordinates() const {return _coordinates;}
};
我想将多重映射的内容复制到映射中,这样我就可以向后面添加更多数据而不会弄乱第一个,并且比将 _mapNewPoints 声明为多重映射(使用 []可用于地图但不可用于多地图的运算符)。
我该如何解决这个问题?
解决方法
_mapNewPoints[it->first].insert
意味着 Point
有一个 insert
方法,但事实并非如此。我相信你可能想要这样的东西:
for (it = _mapIntersectionVertices.begin(); it != _mapIntersectionVertices.end(); ++it)
{
_mapNewPoints.insert(*it);
}