当前位置:  开发笔记 > 编程语言 > 正文

memcmp排序

如何解决《memcmp排序》经验,为你挑选了1个好方法。

我有一个缓冲区,并有几个指针.我想根据指向的缓冲区中的字节对指针进行排序.

可以为qsort()和stl :: sort()提供自定义比较函数.例如,如果缓冲区为零终止,我可以使用strcmp:

int my_strcmp(const void* a,const void* b) {
  const char* const one = *(const char**)a,
  const two = *(const char**)b;
  return ::strcmp(one,two);
}

但是,如果缓冲区不是零终止,我必须使用需要长度参数的memcmp().

在没有全局变量的情况下,是否有一种整齐有效的方法可以将缓冲区的长度放入我的比较函数中?



1> Evan Teran..:

使用std :: sort,您可以使用这样的Functor:

struct CompString {
    CompString(int len) : m_Len(len) {}
    bool operator<(const char *a, const char *b) const {
        return std::memcmp(a, b, m_Len);
    }
private:
    int m_Len;
};

然后你可以这样做:

std::sort(begin(), end(), CompString(4)); // all strings are 4 chars long

编辑:从评论建议(我猜两个字符串都在一个公共缓冲区?):

struct CompString {
    CompString (const unsigned char* e) : end(e) {}
    bool operator()(const unsigned char *a, const unsigned char *b) const {
        return std::memcmp(a, b, std::min(end - a, end - b)) < 0;
    }
private:
    const unsigned char* const end;
};

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有