比较对的功能

时间:2015-12-09 17:38:37

标签: c++ dictionary keyvaluepair

我有一对:type_AB

我需要为该地图实现我自己的比较功能,所以我尝试了:

typdef pair <unsigned char *, vector<int>> pair_t

我得到的错误信息是:

  

错误的模板参数数量(3应为2)

我对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); 做了同样的事情,这很好。

如何为pair创建我自己的比较函数?

我怎样才能确定pair_t数据(someCharArr,someIntVector);会找到正确的密钥(如果是char *作为密钥)?

感谢。

2 个答案:

答案 0 :(得分:2)

你似乎对不同阶级的责任感到困惑。问题不在于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

答案 1 :(得分:1)

std::pair只是一个有两个成员的结构,它没有内置的比较对象。

您可能会对std::map给出的比较对象感到困惑(后者持有std :: pair的序列)。