# std::wmemcmp

< cpp‎ | string‎ | wide

定义于头文件 `<cwchar>` |  |
int wmemcmp( const wchar_t* lhs, const wchar_t* rhs, std::size_t count ); |  |

比较 `lhs` 和 `rhs` 所指向的宽字符数组的首 `count` 个宽字符。按字典序比较。

结果的符号是在被比较数组中相异的首对宽字符值的差。

若 `count` 为零，则不做任何事。

### 参数

lhs, rhs | - | 指向要比较的宽字符数组的指针
count | - | 要检验的宽字符数

### 返回值

若 `lhs` 中首个相异的宽字符小于 `rhs` 中对应的宽字符则为负值：字典序中 `lhs` 先于 `rhs` 。

若 `lhs` 和 `rhs` 的全部 `count` 个宽字符相等则为 ​0​ 。

若 `lhs` 中首个相异的宽字符大于 `rhs` 中对应的宽字符则为正值：字典序中 `rhs` 先于 `lhs` 。

### 注意

此函数不考虑本地环境，且不注意其所检验的 wchar_t 对象的值：亦会比较空字符和非法宽字符。

### 示例

    #include <iostream>
    #include <string>
    #include <cwchar>
    #include <locale>
    #include <clocale>

    void demo(const wchar_t* lhs, const wchar_t* rhs, std::size_t sz)
    {
        std::wcout << std::wstring(lhs, sz);
        int rc = std::wmemcmp(lhs, rhs, sz);
        if(rc == 0)
            std::wcout << " compares equal to ";
        else if(rc < 0)
            std::wcout << " precedes ";
        else if(rc > 0)
            std::wcout << " follows ";
        std::wcout << std::wstring(rhs, sz) << " in lexicographical order\n";
    }

    int main()
    {
        std::setlocale(LC_ALL, "en_US.utf8");
        std::wcout.imbue(std::locale("en_US.utf8"));

        wchar_t a1[] = {L'α',L'β',L'γ'};
        constexpr std::size_t sz = sizeof a1 / sizeof *a1;
        wchar_t a2[sz] = {L'α',L'β',L'δ'};

        demo(a1, a2, sz);
        demo(a2, a1, sz);
        demo(a1, a1, sz);
    }

可能的输出：

    αβγ precedes αβδ in lexicographical order
    αβδ follows αβγ in lexicographical order
    αβγ compares equal to αβγ in lexicographical order

### 参阅

wcscmp | 比较两个宽字符串 (函数)
memcmp | 比较两个缓冲区 (函数)
wcsncmp | 比较来自两个宽字符串的一定量宽字符 (函数)