Ваш оператор сравнения должен принять два const std::wstring
объекта в качестве входных данных, потому что это то, что std::map
передаст ему. Исходя из этого, используйте метод c_str()
и проведите сравнение:
struct NOCASECOMPARE_STRUCT
{
bool operator() (const std::wstring& sz1, const std::wstring& sz2) const
{
const wchar* psz1 = sz1.c_str();
const wchar* psz2 = sz2.c_str();
return _tcsicmp(psz1, psz2) < 0;
}
};
Вы можете прибегнуть к одному вкладышу, но сделать это таким способом легче для отладки.
При поиске пройдитеаргумент как wstring
:
IColumn* operator[](LPCTSTR pszColumn) const
{
auto it = m_IndexLookup.find(std::wstring(pszColumn));
...
LPCTSTR
в основном const whar*
. Вы не можете конвертировать std::wstring
в const wchar*
напрямую, но вы можете через c_str()
.