快速查找带有重复项的条目

时间:2015-06-06 18:38:56

标签: c++ c++11 multidimensional-array

我正在寻找一种方法来帮助我以非常有效的方式快速查找某种表结构中的重复条目。这是我的问题:

我有Cargo类型的对象,其中每个Cargo都有一个其他关联Cargo的列表。每种货物也有与之相关的类型。

所以例如:

class Cargo {
   int cargoType;
   std::list<Cargo*> associated;
}

现在,对于每个货物对象及其相关货物,根据其类型分配给它一定的值。此评估由实现CargoEvaluator的类进行。

现在,我有一个CargoEvaluatorManager,基本上可以将所有内容连接在一起。 CargoEvaluators已在CargoEvaluatorManager注册,然后,为了评估货物,我致电CargoEvaluatorManager.EvaluateCargo(Cargo* cargo)

这是当前状态

class CargoEvaluatorManager{
std::vector<std::vector<CargoEvaluator*>> evaluators;

double EvaluateCargo(Cargo* cargo)
{
   double value = 0.0;
   for(auto& associated : cargo->associated) {
      auto evaluator =  evaluators[cargo->cargoType][associated->cargoType];
      if(evaluator != nullptr)
          value += evaluator->Evaluate(cargo, associated);
    }

    return value;
}
}

所以回顾并提一些额外的观点:

  • CargoEvaluatorManager使用货物类型作为索引将CargoEvaluators存储在二维数组中。用nullptrs初始化整个2d向量。当注册CargoEvaluator时,调整阵列大小以及我未在此处显示的其他位和内容将得到适当处理。

  • 我曾尝试使用带有std :: pair的地图作为查找不同评估者的关键,但速度太慢了。

  • 这只允许CargoEvaluator的每个组合cargotype一个EvaluateCargo。我希望有多个货物评估员。

  • 我称之为Evaluators数十亿次。我知道我目前的实施并不是最有效的,我正在寻找替代方案。

我在寻找什么

如上所述,除了我想为每对Cargo类型允许多个-------------------------------------------- |int type 1 | int type 2 | CaroEvaluator* | |------------------------------------------| | 5 | 7 | Eval1* | | 5 | 7 | Eval2* | | 4 | 6 | Eval3* | -------------------------------------------- 之外,我想做我已经概述的大部分内容。正如我想象的那样,天真地,是这样的表:

(5,7)
  • 查找应该是对称的,因为集合(7,5)Caro应解析为相同的条目。为了速度,我不介意预加载重复的条目。

  • 列表中的关联Evaluators可能比penalty多3倍或更多,如果这会影响到事物。

  • 如上所述,性能至关重要!

  • 对于奖励积分,每个货物评估员可能会有一个与之相关的额外Associates值,而不取决于Cargo个{{1} }} 具有。换句话说:如果查找上表中的一行,我想每次调用double Evaluator->AddPenality() 一次,只需调用EvaluateCargo。我无法存储任何实例变量,因为它会导致一些多线程问题。

  • 一个额外的限制因素是我需要能够识别与特定CargoEvaluators相关联的cargotype,这意味着将两种车型混合在一起并不是一个可行的选择。

如果需要进一步澄清,我很乐意尝试提供帮助。

提前谢谢大家!

0 个答案:

没有答案