c++ - 对比较函数

标签 c++ dictionary keyvaluepair

我有一对:typdef pair <unsigned char *, vector<int>> pair_t

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

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);

我得到的错误信息是:

wrong number of template argument (3 should be 2)

我对 map 做了同样的事情一切都很好。

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

我如何确定 pair_t data(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允许您将它们用作 map 中的键。

这是因为您似乎在编译时知道数组的长度,而且它始终为 10。如果您在编译时实际上不知道数组的长度,那么您会使用std::vector<unsigned char>而不是 std::array .

关于c++ - 对比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185385/

相关文章:

c++ - 通过翻转单元格组用零填充二维数组

c++ - 在初始化/激活 ActiveX 控件后,如何获取该控件的 HWND?

ruby - 创建哈希的快捷方式

编辑配置文件的PHP函数

c++ - 从函数返回时写入内存

c++ - 如何防止数组数据被修改?

c# - Linq 从 Dictionary 值匹配中返回WhereEnumerableIterator?

java - 在Java中对多个相对列表进行排序

python - 这本字典如何获取数据?

asp.net-mvc - 将 KeyValuePair 序列化为 JSON 中的 [Key,Value]