重载map :: key_comp,以便我可以在对象指针的地图上使用map :: find

时间:2014-02-28 17:19:59

标签: c++ map

map::find利用map::key_comp搜索密钥。我想,默认map::key_comp适用于内置数据类型。 我有一个对象指针映射std::map<A*, B*),并希望找到A的对象指针。 是否可以重载map :: key以便我可以使用干净的map::find语义?如果是这样,怎么样? 我知道std::find_if可能是要使用的,但我只是想知道这个选项是否可行。

我想重载map::key_comp的另一个原因是,对于用户创建的类,默认比较没有任何意义。所以std::map无法按照我想要的方式按键排序(使用我的对象比较逻辑)。

2 个答案:

答案 0 :(得分:1)

在定义地图时,请查看指定比较模板参数:

class CompareIntPtr
{
public:
    bool operator()( int* p1, int* p2 )
    {
        return *p1 < *p2;   
    }
};

int main() {

    typedef std::map< int*, int, CompareIntPtr > TestMapType;
    TestMapType m;

    int *i1 = new int( 1 );
    int *i2 = new int( 2 );

    m.insert( std::make_pair( i1, 1 ) );
    m.insert( std::make_pair( i2, 2 ) );

    TestMapType::const_iterator found = m.find( i1 );
    if( found != m.end() )
        std::cout << "Found i1";

    return 0;
}

答案 1 :(得分:0)

您可以使用自定义比较器声明地图,您可以在其中添加比较逻辑

struct structMyObjectAComparer
    {
        bool operator ()(const A* pLeft, const A* pRight)
        { 

        }
    };

std::map<A*, B*, structMyObjectAComparer> myMap