Unordered_map find const wchar_t * - PullRequest
       21

Unordered_map find const wchar_t *

0 голосов
/ 11 декабря 2018

Я использую следующий код для получения имени файла из пути к файлу:

const wchar_t* MyClass::PathFindFileNameW(const wchar_t* path)
{

 const wchar_t* p1 = path ? wcsrchr(path, L'\\') : nullptr;
 const wchar_t* p2 = path ? wcsrchr(path, L'/') : nullptr;

 p1 = !p1 || (p2 && p2 > p1) ? p2 : p1;

 return (p1 ? p1 + 1 : path);

}

У меня также есть следующее определение unordered_map:

std::unordered_map<const wchar_t*,std::string> mymap = {
 {L"file1.doc","Author1"},
 {L"file2.doc","Author2"},
 {L"file3.doc","Author3"} };

Используя следующий код, я хочу получитьАвтор с карты по имени файла:

std::unordered_map<const wchar_t*,std::string>::const_iterator got = mymap.find(this->PathFindFileNameW(this->path));

if (got == mymap.end())
{

    Log("No result");

}

Этот код регистрирует «Нет результата», даже если имя файла существует на карте. Что-то вроде:

std::unordered_map<const wchar_t*,std::string>::const_iterator got = mymap.find(L"file1.doc");

дает результат. Что такоеЯ здесь скучаю?

1 Ответ

0 голосов
/ 11 декабря 2018

У вас есть карта с указателями в качестве ключей, поэтому вы найдете строку, только если она хранится по тому же адресу, что и ключ.

Используйте std::wstring в качестве ключей.

...