为什么我不能用C ++映射结构?

时间:2016-08-11 04:54:40

标签: c++ mapping structure

我宣布了这样的结构 - >

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

现在我希望将map作为密钥并使用bool值。

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

最后一行给了我这个错误 - &gt;

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

std::map<Key, Value>在内部将它们存储为std::map<const Key, Value>。这里重要的是Keyconst

因此,在您的示例中,dataconst,但operator<不是!你不能从const对象调用非const方法,所以编译器会抱怨。

您必须将operator<指定为const

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