c ++ map查找值和关联键

时间:2014-03-06 08:53:11

标签: c++ templates map stl client-server

我在c ++中开发了一个程序,我必须使用值在stl map中找到键。 但是分配给key的值是5元组(srcip,port,destip,port,srcno)

现在我想检查地图中是否存在与值相关的关键字。 我正在尝试这样的事情。

但它的显示错误就像 错误的模板参数数量。 注意(在我的程序中,对键 - >值;)值由5个变量的元组组成。

template<class T>
struct map_data_compare : public std::binary_function<typename T::value_type,typename T::mapped_type,bool>
{
public:
bool operator() (typename T::value_type &pair,typename T::mapped_type i)
{
return pair.second == i;
}
}


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=Saddr;
S_port=Sport;
C_ID=Cid;
}

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



//In main

    {

    typedef std::map<int, Values> itemsType;
    itemsType items;


    Values connection (inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port),inet_ntoa(servaddr.sin_addr),ntohs(servaddr.sin_port),clientID);



    std::map<std::int,Values>::iterator it = std::find_if( items.begin(), items.end(), std::bind2nd(map_data_compare<itemsType>(),connection));

    if ( it != items.end() )
    {
    assert( connection == it->second);
    std::cout << "Found index:" << it->first << " for values:" << it->second << std::endl;
    }
    else
    {
    std::cout << "Did not find index for values:" << connection <<endl;
    }

2 个答案:

答案 0 :(得分:0)

  

我在c ++中开发了一个程序,我必须使用值在stl map中找到键。

这不是地图的意思。如果您需要这种访问权限,我建议您Boost.Bimap

答案 1 :(得分:0)

如果“密钥”必须是唯一的,您可以尝试将密钥和值合并到std::pair并将其推送到std::set

否则,您应该将键设置为值和值作为键,因为您似乎主要使用原始值作为我们对“键”的处理。然后你可以使用内置的map::find()函数