gpt4 book ai didi

c++ - memcmp 排序

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:22 24 4
gpt4 key购买 nike

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

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()。

有没有一种简洁、有效的方法可以在没有全局变量的情况下将缓冲区的长度输入到我的比较函数中?

最佳答案

对于 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

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

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

关于c++ - memcmp 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com