请问各位 C++ 专家的快速问题:
在我正在进行的项目中,有一个类包含指向 vector 中对象的指针:
std::vector<object*> objects;
还有一个struct给对象加上了偏移量(Point2D显然是x,y坐标)
struct DraggedObject{
object* obj;
Point2D offset;
DraggedObject():obj(NULL),offset(Point2D(0,0)){}
};
每当你拖动一个对象时,它都会将它添加到一个 std::map 中,如下所示:
std::map <int, DraggedObject> dragged_objects;
所以我的问题是:有一个循环,我需要在其中移动这个对象,但跳过被拖动的对象。我的问题是:有没有办法遍历对象 vector 并找出对象是否在 dragged_object map 上?
我正在做这样的事情:
for(std::vector<object*>::iterator it = objects.begin(); it != objects.end(); it++){
if(//Object is not in dragged_objects){
(*it)->move_to( Point2D( //Some point);
}else{
(*it)->move_to (Point2D (//Point of dragged object);
}
但我不知道如何进行比较...
抱歉新手问题。
最佳答案
std::map 针对按键(在本例中为 int 值)快速查找进行了优化,而不是针对值(您的对象*)进行快速查找。因此,您唯一的选择就是遍历整个 map ,直到找到它。本地图很小并且代码部分不是性能关键时,您可以这样做。当性能很重要时,您可以添加一个额外的 std::set 并将所有当前正在拖动的对象存储在其中,或者您可以让对象本身知道它们当前是否正在被拖动,并向您的方法添加一个 isDragged() 方法对象类。
关于c++ - 从 std::vector 查找 std::map 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274805/