3

我有一个大致定义如下的类。其中,它有一个<比较运算符。

class DictionarySearchItem {

public:

    DictionarySearchItem(); 
    double relevance() const;
    bool operator<(const DictionarySearchItem& item) { return relevance() > item.relevance(); }

};

typedef std::vector<DictionarySearchItem> DictionarySearchItemVector;

然后我以这种方式使用该类:

DictionarySearchItemVector searchItems;

for (unsigned i = 0; i < entries.size(); i++) {
    // ...
    // ...
    DictionarySearchItem item;
    searchItems.push_back(item);
}

但是,当我尝试对向量进行排序时:

std::sort(searchItems.begin(), searchItems.end());

我收到以下 MinGW 编译错误。

/usr/include/c++/4.2.1/bits/stl_algo.h:91: erreur : passing 'const hanzi::DictionarySearchItem' as 'this' argument of 'bool hanzi::DictionarySearchItem::operator<(const hanzi::DictionarySearchItem&)' discards qualifiers

我不太明白我的代码有什么问题,而且我也不清楚错误消息。相同的代码在 MSVC2008 上编译得很好。知道可能是什么问题吗?

4

1 回答 1

5

您需要制作小于运算符const

bool operator<(const DictionarySearchItem& item) const { ... }
                                                   ^

原因可能是sort因为被比较的元素不能因为比较而改变。这可以通过让比较的两边<都是 const 来强制执行,这意味着运算符必须是 const,以及它的参数。

于 2012-06-03T12:17:58.720 回答