【问题标题】:Maps and Arrays地图和数组
【发布时间】:2012-02-02 17:27:18
【问题描述】:

我正在为学校做一个项目,我正在尝试创建一个使用大小为 2 的数组作为地图索引的地图。我什至不确定这是否可能,因为我不知道我可以访问地图的元素(因为我真的不知道如何按值引用整个数组)。基本上我正在尝试使用地图索引作为字符串的协调系统。如果有人能让我知道这是否可能,以及语法是否是这样,那将是一个很大的帮助。谢谢! 我正在用 C++ 做这个项目

【问题讨论】:

  • 你使用什么编程语言?

标签: c++ arrays map coordinate-systems


【解决方案1】:

如果使用 Java,您可以使用的一种方法是使用类包装您的数组,然后实现 hashCodeequals 方法。这些方法是一种允许其他对象识别该类的实例的机制。例如,Map 类使用 hashCode 作为键来存储和检索该对象。

这是您的包装类的示例。

class Point {
  private int[] coordinates;


  public Point(int x, int y){
     this.coordinates = new int[]{x, y};
  }
  @Override
  public boolean equals(Object o){ 
     // implement equals as stated in the docs.
  }

  @Override
  public int hashCode(){
     // implement hashCode as stated in the docs using coordinates[0] and coordinates[1]
  }

}


class App {
   public static void main(String[] args){
      Map<Point, String> map = new HashMap<Point, String>();
      map.put(new Point(1,2), "some string");
      // etc...
   }
}

【讨论】:

  • C# 的答案类似。您将使用 Dictionary 并实现自定义 IEqualityComparer
  • 不幸的是,我不得不用 c++ 做这个项目,而且我真的没有用 java 做任何编码。我猜在 C++ 中,@override 本质上是在改变操作符的运作方式。如果你能让我知道这是否正确,那就太好了。其余的代码非常有帮助!谢谢!
【解决方案2】:

嗯,最简单的方法是将值连接成一个字符串(假设它很简单)如果您使用整数或浮点数,只需将 {1.2, 4.3} 表示为字符串“1.2,4.3”并制作您的地图键字符串类型。

ggreiner 的答案是一个很好的 Java 实现,我在他的 C# 实现中加入了评论,但我无法帮助您在 C++ 中生成哈希码。但是,如果这是为了家庭作业,将数组转换为字符串会起作用,这可能是您的教师所期望的。

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2021-08-04
    • 2021-12-07
    • 2017-06-27
    • 2020-09-21
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多