相关疑难解决方法(0)

高效的整数比较功能

compare函数是一个函数,它接受两个参数a,b并返回一个描述其顺序的整数.如果a小于b,则结果为负整数.如果a大于b,则结果为正整数.否则,a并且b相等,结果为零.

此功能通常用于参数化标准库中的排序和搜索算法.

实现compare字符功能非常简单; 你只需减去参数:

int compare_char(char a, char b)
{
    return a - b;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为通常假设两个字符之间的差异适合整数.(请注意,此假设不适用于以下系统sizeof(char) == sizeof(int).)

这个技巧无法比较整数,因为两个整数之间的差异通常不适合整数.例如,INT_MAX - (-1) = INT_MIN建议INT_MAX小于-1(技术上,溢出导致未定义的行为,但让我们假设模运算).

那么我们如何才能有效地为整数实现比较函数呢?这是我的第一次尝试:

int compare_int(int a, int b)
{
    int temp;
    int result;
    __asm__ __volatile__ (
        "cmp %3, %2 \n\t"
        "mov $0, %1 \n\t"

        "mov $1, %0 \n\t"
        "cmovg %0, %1 …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly inline-assembly

61
推荐指数
4
解决办法
3万
查看次数

STL具有3路比较谓词

是否有与像STL功能的任何文库std::sort(),std::binary_search(),std::lower_bound(),std::upper_bound()接受(对大其返回-1上更小,0上相等,1)3路比较谓词而不是更少谓词(上少真,假上等于或大)?

当然,较少的谓词可以很容易地从现有的3向谓词(例如[](A a, B b) { return compare3(a,b)<0; })中得出,但这会导致对谓词的额外调用次数.

c++ sorting stl binary-search lower-bound

5
推荐指数
1
解决办法
875
查看次数

为什么C++ STL容器使用"小于"运算符<而不是"等于"运算符==作为比较器?

在自定义类中实现比较器运算符时std::map,我遇到了这个问题,无法看到任何问题.

除了上述问题,还有兴趣简要了解一下,如何operator<工作std::map.

问题的起源:

struct Address {
  long m_IPv4Address;
  bool isTCP;
  bool operator< (const Address&) const;  // trouble
};
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading map comparator

4
推荐指数
2
解决办法
5966
查看次数