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
无法按照我想要的方式按键排序(使用我的对象比较逻辑)。
答案 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