【问题标题】:Can't i find Keyvalue of map container TCHAR* using TCHAR[]?我不能使用 TCHAR[] 找到地图容器 TCHAR* 的键值吗?
【发布时间】:2016-11-14 15:06:48
【问题描述】:
#include<iostream>
#include<map>

using namesapce std;
void main()
{
   map<const TCHAR*, int> Map;
   Map.insert(make_pare(L"DOG1",1));
   Map.insert(make_pare(L"DOG2",2));

   TCHAR szTem[128];
   wsprintf(szTem,L"DOG%d",1);

   map<const TCHAR*, int>::iterator iter = Map.find(szTem);

   cout << iter->second << endl;
}

像本例一样,我无法使用 TCHAR[] 找到 TCHAR* Keyvalue。 为什么我不能这样做,如何使用包含整数公式的字符串找到指针字符串 Keyvalue?

【问题讨论】:

  • 因为没有为 TCHAR* 定义比较运算符&lt; 来取消引用指针并比较字符串值,所以它将比较不正确的指针地址值。您需要定义比较器或使用std::string 是否有理由需要在这里使用TCHAR
  • 你没有定义TCHAR。如果您使用非标准功能,您应该告诉我们您的目标是哪个 os/compiler/standard library。 void main 也不是标准的。

标签: c++ stl


【解决方案1】:

你不能这样做,因为默认的map 比较器会比较TCHAR 指针,这当然会有所不同。最好的方法是改用std::wstring。如果你坚持使用TCHAR指针,你必须提供custom comparator

【讨论】:

  • 如果TCHAR 不是wchar_t 怎么办?
  • 然后使用std::string,或者定义一个宏以防您需要支持两种类型的字符串。
  • 您不需要宏。只需使用std::basic_string&lt;TCHAR&gt; 即可支持任何TCHAR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多