【问题标题】:How can I find the position of an object (not an int) inside a c++ 2d vector?如何在 c++ 2d 向量中找到对象(不是 int)的位置?
【发布时间】:2019-05-27 16:49:22
【问题描述】:

我需要在一个网格中跟踪对象(盒子)的位置,以开发我正在开发的类似 candycrush 的游戏。

我发现跟踪它们在网格中的位置的最简单方法是将它们添加到二维向量中,根据游戏逻辑将它们移动到向量中。这很容易。

困难的部分,也是我真正陷入困境的地方是在任何给定时间获取它们在网格上的当前位置,或者在这种情况下,获取 2d 向量内的位置。 简而言之,如果我有一种简单的方法来定期检查我的 Box 对象在其 2d 数组中的位置,那将解决问题。

我一直在搞乱 std:find 和 std:count,但我还是个新手,我遇到了困难。以下代码相同:

#include <algorithm>
#include <iostream>
#include <vector>


using namespace std;

struct position
{
    int x;
    int y;
};

class Box
{
public:
    position currentPosition;

};


int main(int argc, const char * argv[])
{

    Box box1 = Box();
    Box box2 = Box();
    Box box3 = Box();
    Box box4 = Box();
    Box box5 = Box();
    Box box6 = Box();
    Box box7 = Box();
    Box box8 = Box();
    Box box9 = Box();


   // vector<vector<Box>> boxes2dVector;
//
    vector<vector<Box>> boxes2dVector =
    {
        {box1, box2,box3},
        {box4, box5,box6},
        {box7, box8,box9}

    };


    return 0;
}

position getPositionOfBox (Box box, vector<vector<Box>> vct)
{
    position resultPositon;

    /*
     This is what I need...some code that finds the position in the of a Box object in side a 2d array
     */


    return resultPositon;
};

任何想法或帮助,任何人?

非常感谢!

【问题讨论】:

  • 提供像您这样的面向坐标的矩阵(2D)的一般更好的方法可能是将简单的std::vector&lt;Box&gt; boxes2dVector(rows * cols) 包装到一个单独的类中,并使用公共接口管理这个矩阵(包括const operator()(size_t row, size_t col)可能超载)。
  • @πάνταῥεῖῖ ,非常感谢。我同意我正在寻找的解决方案可能不是理想的解决方案...您能否给我任何有关如何实施此问题的提示或链接?

标签: c++ stdvector


【解决方案1】:

您可以尝试使用 std::unordered_map ,其中键是盒子,值是它在数组中的位置。否则,我建议将其坐标存储在盒子本身中。每次遍历整个数组都会得到 O(N) 的性能。只要您适当地更新 std::unordered_map,我相信查找将是 O(1)。

【讨论】:

  • 谢谢迈克尔。我同意,将位置存储在盒子对象本身上将是理想的解决方案。问题是当它在矢量内移动时如何更新该位置......有什么方法可以做到这一点,我没有看到?可能有,但它在逃避我..
  • 不知何故,实现自定义哈希函数比实现 operator == 重载更简单。
【解决方案2】:
猜你喜欢
  • 2014-01-10
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多