矢量版本的慢multiset

时间:2016-04-19 13:05:56

标签: c++ vector iterator multiset

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

函数参数:

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

(shared_ptr的Typedef):

typedef boost::shared_ptr<MyItem> Ptr;

排序功能:

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

使用multiset的原始版本(使用funcSort时为SLOW):

  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

1 个答案:

答案 0 :(得分:2)

你的排序电话错了。您只想传递function ExcelReport() { var tab_text = "<table border='2px'><tr border='1px'>"; var tabcol = []; var j = 0; var i=0; var temp; tab = document.getElementById('myTable'); // id of table var col = tab.rows[1].cells.length; tab_text = tab_text + tab.rows[0].innerHTML + "</tr><tr>"; // table title row[0] for (j = 1; j < tab.rows.length; j++) { for(i=0;i<col;i++){ if(j==1){ // table header row[1] tabcol = tabcol + "<td bgcolor='#C6D7EC'>" + tab.rows[j].cells[i].innerHTML + "</td>"; }else{ tabcol = tabcol + "<td>" + tab.rows[j].cells[i].innerHTML + "</td>"; } } if(j==1){ temp = tabcol + "</tr>"; }else{ temp = temp + tabcol + "</tr>"; } tabcol = []; } tab_text = tab_text + temp + "</table>"; var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer { txtArea1.document.open("txt/html", "replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa = txtArea1.document.execCommand("saveAs", true,"MyExcelReport.xls"); } else //other browser not tested on IE 11 sa = window.open('data:application/vnd.ms-excel,'+ encodeURIComponent(tab_text)); return (sa); } ,而不是调用它。

试试这样:

funcSort