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 に答える