慢多集的矢量版本

vector version of slow multiset

我想根据一些标准(根据项目的大小)对我的对象进行排序 我在 multiset 中的 funcSort 会减慢计算速度并使解决方案无法扩展。我怎样才能让它更快? 为了避免这种情况,我尝试使用矢量,对其进行排序(应该更快?)并将其更改为多重集。但是我的解决方案不起作用,我不确定我做错了什么?

函数参数:

void deliver(const std::set<MyItem::Ptr> items, MyItem::Ptr item)

(shared_ptr 的类型定义):

typedef boost::shared_ptr<MyItem> Ptr;

排序函数:

  auto funcSort = [item](MyItem::Ptr lhs, MyItem::Ptr rhs){
        return lhs->howFar(item->howBig()) < rhs->howFar(item->howBig());
      };

原始多集(使用 funcSort 时速度慢):

  std::multiset<MyItem::Ptr, decltype(funcSort)> sortedItems(funcSort);

  for (MyItem::Ptr item : items){
    sortedItems.insert(item);
  }

我的向量尝试(错误消息):

  std::vector<MyItem::Ptr> sortedItems;
  for (MyItem::Ptr item : items)
  {
    sortedItems.push_back(item);
  }
  std::sort(sortedItems.begin(), sortedItems.end(), funcSort());
  std::multiset<MyItem::Ptr> ms(sortedItems.begin(), sortedItems.end());

错误信息:

   __lambda1
   auto funcSort = [item](MyItem::Ptr lhs, MyItem::Ptr rhs)
 candidate expects 2 arguments, 0 provided

你的排序调用有误。您只想传递 funcSort,而不是调用它。

这样试试:

std::sort(sortedItems.begin(), sortedItems.end(), funcSort);