Естественный порядок сортировки в C ++ с использованием функции StrCmpLogicalW в этой библиотеке shlwapi.dll - PullRequest
1 голос
/ 25 апреля 2011

Я пытаюсь узнать, как использовать функцию StrCmpLogicalW.В C # есть запись в порядке естественной сортировки в C # .Но я ищу синтаксис в C ++.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

Я наконец понял это.Вот функция.Крайне важно, чтобы вы поместили заголовочные файлы shlwapi.h и vcclr.h перед любыми вашими собственными заголовочными файлами, если они у вас есть.Это была проблема, с которой я боролся.Не до конца понимаю, почему это так.Если у кого-то есть хорошее объяснение, добро пожаловать комментировать.Кроме того, если кто-то знает, как объединить последние три строки кода в одном операторе возврата, добро пожаловать в добавление комментария.

#include "shlwapi.h"  //needed this for StrCmpLogicalW
#include <vcclr.h>   //needed this for PtrtoStringChars
//your own header files

ref class FileInfoNameComparer: public IComparer
    {
    private:

       virtual int Compare( Object^ x, Object^ y ) sealed = IComparer::Compare
       {
            FileInfo^ objX = gcnew FileInfo(x->ToString());
            FileInfo^ objY = gcnew FileInfo(y->ToString());
            pin_ptr<const wchar_t> wch1 = PtrToStringChars(objX->Name);
            pin_ptr<const wchar_t> wch2 = PtrToStringChars(objY->Name);
            return  StrCmpLogicalW(wch1, wch2);
       }

    };
0 голосов
/ 25 апреля 2011

Вы хотите сказать, что хотите отсортировать коллекцию строк с помощью этой функции?

bool mycomp(PCWSTR lhs, PCWSTR rhs)
{
    return StrCmpLogicalW(lhs,rhs) < 0;
}

Или если вы используете std::wstring:

bool mycomp(const std::wstring & lhs, const std::wstring & rhs)
{
    return StrCmpLogicalW(lhs.c_str(),rhs.c_str()) < 0;
}

Тогда вы можете вызватьstd :: sort с использованием этой функции, допустим, у вас есть std::vector<std::wstring> с именем v:

std::sort(v.begin(), v.end(), mycomp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...