c++ - 错误 : no match for ‘operator<’ in ‘__x < __y’ when trying to insert in two map

标签 c++ dictionary stl operator-overloading client-server

在代码中有两个映射。一个存储对和另一个存储,其中值是具有 5 个变量的类,数据类型为字符串、整数、字符串、整数、整数。但是在插入第二个映射期间,我收到错误 g++ 错误:尝试在 map 中插入时,'__x < __y' 中的 'operator<' 不匹配。 (注意第一个映射中的键和值更改为第二个映射中的值,键)

如何解决。

class Values
{
private:
    std::string C_addr;
    int C_port;
    std::string S_addr;
    int S_port;
    int C_ID;

public:
    Values(std::string,int,std::string,int,int);
    void printValues();
};


Values :: Values(std::string Caddr,int Cport,std::string Saddr,int Sport,int Cid)
{
    C_addr=Caddr;
    C_port=Cport;
    S_addr=Swaddr;
    S_port=Sport;
    C_ID=Cid;
}

void Values::printValues()
{
    cout << C_addr<<":" <<C_port<<":" << S_addr <<":" <<S_port << ":"<<C_ID  <<endl;
}


map<int, Values> items;
map<Values,int> itemscopy;

Values connection (inet_ntoa(Caddr.sin_addr),ntohs(Caddr.sin_port),inet_ntoa(Saddr.sin_addr),ntohs(Saddr.sin_port),CID);


for(unsigned int key=0;key<=30000;    )
{
    map<int,Values>::const_iterator itemsIterator=items.find(key);

    if(itemsIterator==items.end())
    {
        items.insert(pair<int, Values> (key, connection));
        {
            map<Values,int>::const_iterator itemsIterator1;
            if(itemsIterator1==itemscopy.end())
                itemscopy.insert(pair<Values,int> (connection, key));
        }
    break;
    }
    else
    {
        cout<<"already exist";
        key=key+1;
    }
}

最佳答案

编译器不知道在映射中插入键的顺序。您必须为类值定义一些顺序关系。

您需要为您的类定义运算符 <。例如,您可以通过以下方式或其他方式进行

class Values
{
private:
    std::string C_addr;
    int C_port;
    std::string S_addr;
    int S_port;
    int C_ID;

public:
    Values(std::string,int,std::string,int,int);
    void printValues();
    bool operator <( const Values &rhs ) const
    {
       return ( C_ID < rhs.C_ID );
    }
};

关于c++ - 错误 : no match for ‘operator<’ in ‘__x < __y’ when trying to insert in two map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248284/

相关文章:

c++ - 如何反转二叉搜索树?

c++ - 简单的效率问题 C++(内存分配)..也许一些碰撞检测有帮助?

c++ - 指向数组的指针,我错过了什么?

c++ - 如何将 IHTMLDocument2 ->get_body ->get_innerHTML 变成小写字符串?

arrays - 如何在 React 中映射对象数组

java - 使用来自服务器的数据填充 GWT 中的 Dictinoary 对象

c++ - 如何正确返回一个大 vector

ios - 在 Swift 中将具有多个键的字典数组简化为具有单个键的字典数组

c++ - 为什么我不能使用 std::unique_ptr 来避免循环依赖?

c++ - 如何避免序列化器和容器序列化器之间的循环模板依赖?