创建以结构为键和值的std :: map

时间:2018-10-24 12:33:13

标签: c++ std

我想在一个类中定义一个静态映射,该映射将具有作为键和值的结构。我已经读到需要定义'<'运算符,因此,我将该定义包含在结构本身中(我已经对其进行了随机定义,因为我在任何地方都不需要任何比较在我的程序中。)

下面的示例代码无法编译。编译器会产生很多警告和错误,我现在还不了解。 (请忽略主函数中的未初始化值):

@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
@PrepareForTest({SQLJConnectionBase.class})

编译器输出

#include<string>
#include<iostream>
#include<map>
using namespace std;

struct RJNodeAddress
{
        string m_ip;
        string m_port;
        bool operator<(const RJNodeAddress &l)
        {
                int l_size=l.m_ip.size();
                int r_size=l.m_port.size();
                return (l_size < r_size);
        }
};

struct RJNodeDetails
{
        string m_NodeType;
        int        m_appId;
};

class RJWebsocket
{
public:
static map<RJNodeAddress,RJNodeDetails> m_Nodes;
};

int main()
{
RJNodeAddress l_node;
 RJNodeDetails l_nodeDetails = RJWebsocket::m_Nodes[l_node];

}

1 个答案:

答案 0 :(得分:4)

由于std::map中的键是const,因此您的operator<方法也必须是const:

  bool operator<(const RJNodeAddress &l) const
                                        // ^ here

无论如何它都应该是const,因为它不会修改对象,但是在这种情况下丢失它会导致编译错误。