错误:与'operator不匹配>>

问题描述 投票:6回答:3

在代码中有两个映射。一个存储对和另一个存储,其中Values是具有5个变量的类,其数据类型为string,int,string,int,int。但是在插入第二个映射期间,我遇到错误g ++错误:否尝试插入地图时,匹配“ __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;
    }
}

在代码中有两个映射。一个存储对和另一个存储,其中Values是具有5个变量的类,其数据类型为string,int,string,int,int。但是在插入第二个映射期间,我遇到错误g ++ ...

c++ dictionary stl operator-overloading client-server
3个回答
7
投票

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


3
投票

对于您的第二张地图,密钥类型不可比较。map<Values,int>本质上是这个map<Values, int, std::less<Values>, std::allocator<std::pair<const Values, int>。Sinec,如果您的Value类型没有bool operator<,则不会编译。


0
投票

bool operator<(const Values& other) const类中实现Values成员函数,它将使map<Values, int>能够对Values类型的键进行排序。该映射存储键值对,并且键已排序,因此您需要为其提供比较运算符。实例化map<Values, int>时,是说您将Values用作键,将ints用作该映射的值。

© www.soinside.com 2019 - 2024. All rights reserved.