簡體   English   中英

如何在定義地圖/集時實例化比較函數(仿函數)?

[英]How to instantiate an comparison function (functor) when defining a map/set?

我正在使用一個funciton對象來指定map / set的比較函數:

struct CompareObject {
    bool operator()(Node* const n1, Node* const n2) const;
}; 

據我所知,定義這樣的集合不會創建任何CompareObject實例,並假裝它是靜態的:

std::multiset<Node*, CompareObject> set;

但在我的問題中,我需要將一個Tree實例傳遞給它,因為我在實際的比較函數中使用它:

bool
CompareObject::operator()(Node* const n1, Node* const n2) const {
  if (tree->getNoOfGood(n1) > tree->getNoOfGood(n2)) return false;
  if (tree->getNoOfGood(n2) > tree->getNoOfGood(n1)) return true;
  return false;
}

所以,我在CompareObject定義中添加了一些字段:

struct CompareObject {

  Tree& tree;              // added
  CompareObject(Tree& t);  // added

  bool operator()(Node* const n1, Node* const n2) const;
}; 

我遇到的問題是我不知道如何使用set的定義來實例化這個對象。

我想到的第一件事是:

std::multiset<Node*, CompareObjects(*this)> shapesMap; // not valid code

但並不令人驚訝的是它給了我一個錯誤: 'this'不能出現在常量表達式中

你有任何想法如何解決這個問題?

您可以將仿函數的實例作為參數傳遞給集合構造函數。 那么像multiset<Node*, CompareObject> shapesSet(CompareObject(myTree));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM