繁体   English   中英

如何在C ++中将键作为类插入Map STL中

[英]How can I insert key as a class in map STL in C++

下面的程序是什么问题,为什么我不能使用class作为Key来初始化map

#include <iostream>
#include <map>

#include <utility>

using namespace std;

class User
{
    int value_1;
    int value_2;
public:
    User( int num_1, int num_2)
    {
        value_1 = num_1;
        value_2 = num_2;
    }
    int getId(){
        return value_1;
    }
    int getUid(){
        return value_2;
    }
    bool operator< (const User& userObj) const
    {
        if(userObj.value_1 < this->value_1)
            return true;
    }
};

int main()
{
    std::map<User, int> m_UserInfoMap;

    m_UserInfoMap.insert(std::make_pair<User, int>(User(1,2), 100) );
    m_UserInfoMap.insert(std::make_pair<User, int>(User(3,4), 120) );
    m_UserInfoMap.insert(std::make_pair<User, int>(User(5,6), 300) );
    std::map<User, int>::iterator it = m_UserInfoMap.begin();
    for(; it != m_UserInfoMap.end(); it++)
    {
        std::cout<<it->first.getId()<<" :: "<<it->second<<std::endl;
    }
    return 0;
}

在上面的程序中,如果我尝试将键添加为类,则会报错。 并请说明初始化地图的不同方法。

std::mapvalue_typestd::pair<const Key, T> ,意味着密钥另存为const 因此,您不能像std::cout<<it->first.getId()那样在它们上调用非常量成员函数。

您应该将User::getId() (和User::getUid() )更改为const成员函数。 如:

int getId() const {
//          ~~~~~
    return value_1;
}
int getUid() const {
//           ~~~~~
    return value_2;
}

顺便说一句: if条件在operator<失败, if您不会返回任何内容。

bool operator< (const User& userObj) const
{
    if(userObj.value_1 < this->value_1)
        return true;
    else
        return false;  // return for else case
}

要不就

bool operator< (const User& userObj) const
{
    return userObj.value_1 < this->value_1;
}

首先,您应该让您的运算符始终返回一个值:

bool operator< (const User& userObj) const
{
    return userObj.value_1 < this->value_1;
}

您确定要将x < yy.value < x.value进行比较吗? 否则,您需要在内部更改比较:

bool operator< (const User& userObj) const
{
    return this->value_1 < userObj.value_1;
}

在写这个答案时,第二部分的歌谣瑶要比我快,所以看看他的答案...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM