我有一对:typdef pair <unsigned char *, vector<int>> pair_t
我需要为该地图实现我自己的比较功能,所以我尝试了:
struct myCmp
{
int operator()(unsigned char arr_1[10], unsigned char arr_2[10])
{
return memcmp(arr_1, arr_2, 10);
}
};
typdef pair <unsigned char *, vector<int>, **myCmp**> pair_t;
pair_t data(someCharArr, someIntVector);
我得到的错误信息是:
错误的模板参数数量(3应为2)
我和map
做了同样的事情,很好。
如何为对创建自己的比较函数?
我怎么能确定pair_t数据(someCharArr,someIntVector);会找到正确的密钥(如果char *为密钥)?
谢谢。
你似乎对不同阶级的责任感到困惑。这不是std::pair
需要担心如何比较对,这是std::map
需要担心如何对其键进行排序。
typedef std::map<unsigned char*, std::vector<int>, myCmp> map_t;
从你如何实现比较函数和你不能使用字符串的注释,我实际上建议使用std::array
而不是unsigned char *
。您的代码看起来更像是:
typedef std::map<std::array<unsigned char, 10>, std::vector<int> > map_t;
这是有效的,因为std::array
实现了all the comparison operators,允许您将它们用作地图中的键。
这是因为您似乎在编译时知道数组的长度,并且它始终为10.如果您在编译时实际上并不知道数组的长度,那么您将使用std::vector<unsigned char>
而不是std::array
。
std::pair
只是一个有两个成员的结构,它没有内置的比较对象。
你可能会为std::map
(它依次保存std :: pair的序列)给出的比较对象感到困惑。