![](/img/trans.png)
[英]Implicit conversion to comparison function object (functor) for std::sort but not std::map?
[英]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.