【问题标题】:Mapping two set of values in C++在 C++ 中映射两组值
【发布时间】:2013-01-04 05:32:13
【问题描述】:

对于这样一个幼稚的问题,我深表歉意。我知道这很简单。但现在我什么都没有想到。

我正在使用 C++。我有点担心效率,因为这是针对处理能力和 RAM 非常少的嵌入式硬件。

我有 2 个整数数组,其中包含 50 个函数本地成员。当指定第一个数组中的元素时,我需要确定第二个数组中的相应数字是多少,反之亦然。我知道提供给我用于查找的元素属于哪个数组,即数组 1 或数组 2。

例如:Array1 => 500 200 1000 300 .....

 Array2 => 250 170 500  400 .....

Input 500 , Output will be 250

Input 400 , Output will be 300

input 200 , Output will be 170 and so on

我认为数组查找效率最低。 stl::map 是最佳选择还是我必须寻找任何有效的搜索算法?我想知道您是否必须这样做,您将选择哪个选项。

有什么想法吗?

【问题讨论】:

  • 只有50个项目,效率从来不是问题。
  • 如果数组是静态的,索引是否足够?

标签: c++


【解决方案1】:

你可以使用 std::map 来提高可读性和一点效率,尽管在你的情况下效率是小问题

std::map<int,int> mapping;
.... //populate 
cout <<mapping[200]; //170

这只是一种方式(阵列 1 -> 阵列 2)。我不确定是否有其他更简单的方法,但创建第二张地图。

为了支持反向查找,或者从(数组 2 -> 数组 1)开始,Reverse map lookup 建议使用Boost.Bimap

【讨论】:

  • 如果数组实际上是静态的,那么 switch/case 语句可能是最快的。否则,std::map 可能是最好的。
  • @DavidSchwartz:哦,是的。我完全错过了开关盒选项。我知道它会产生一个冗长的奇怪函数,但就效率而言,它仍然是我最好的选择。
【解决方案2】:

据我所知,已经建议了两种方法;

  1. 将两个数组作为键对值放入一个map中,遍历map找到对应的值或键。

  2. 遍历输入所在的数组并计算索引。在其他数组中获取该索引的值。

我会选择第二种解决方案,因为它更容易。此外,静态数组中只有 50 个元素,您无需担心性能。

【讨论】:

  • +1 已添加。恕我直言,David Schwartz 建议的 switch case 选项是最有效的。
  • 取点。Switch case 是最有效的。但是如果有 50 个元素,你会得到一个巨大的功能。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多