2016-08-11 7 views
4

私はこのような構造を宣言した - >C++で構造体をマップできないのはなぜですか?

struct data{ 
    int x,y; 
    bool operator < (const data& other) { 
     return x<other.x or y<other.y; 
    } 
}; 

今、私はキーとしておよびbool値でそれをmapたい。

int main() 
{ 
    data a; 
    map<data,bool>mp; 
    a.x=12, a.y=24; 
    mp[a]=true; 
} 

最後の行は私にこのエラーが発生します - >

error: passing 'const' as 'this' argument of 'bool data::operator<(const data&)' discards qualifiers 

が、私はこれをどのように問題を解決できますか?

+0

'or'は何ですか? – Ajay

+1

これは '||'と同じです – jbsu32

+0

また、 'and'は' && 'と同じです。 – jbsu32

答えて

10

std::map<Key, Value>は、内部でstd::map<const Key, Value>として保存します。ここで重要なのは、Keyconstであることです。

あなたの例では、dataconstですが、operator<はありません。 constオブジェクトから非constメソッドを呼び出すことはできないので、コンパイラは不満を持ちます。

あなたはconstとしてoperator<を指定する必要があります:

bool operator<(const data& other) const { /*...*/ } 
            ^^^^^ 
+0

ありがとう!それは動作します:)ちょうどもう1つ教えてください! 'a jbsu32

+1

@ JishnuBanerjeeなぜですか? :) – Rakete1111

+2

@ JishnuBanerjee 'const'メソッドは非const変数で呼び出すことができますが、その逆は許されません。 –

関連する問題