c++ - 从 std::vector 查找 std::map 中的对象

标签 c++ stdvector stdmap

请问各位 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/

相关文章:

Visual Studio 中的 C++ 和 OpenCV 退出并出现代码 -1 (0xffffffff) 错误

c++ - 如何将标题标题设置为包装在 QTableWidget 中

c++ - 删除 vector 而不删除数组

c++ - 为 STD vector<bool> 模板特化预留容量

c++(不> = 11),初始化映射中的嵌套对

c++ - 将值分配给以元组为值的嵌套映射时出错

c++ - 如何在QT中对齐表格小部件的文本

c++ - 使用VC++创建跨机DLL

c++ - 这是哪个标准容器行为?

c++ - 如何根据插入的对的存在实现不同的 `std::map insert()` 行为?