首页 > 解决方案 > 如何在 C++ 中访问 LPCWSTR 映射的值

问题描述

我有一张这样的地图:

std::map<LPCWSTR, LPCWSTR> myMap = {
    {L"key1", L"value1"},
    {L"key2", L"value2"}
};

而且我需要从一个类型的变量中获取值,该类型const wchar_t *的值将与键匹配。我试过了

const wchar_t * key = L"key1";
wchar_t VALUE[350] = myMap[key];

但它告诉我“聚合对象需要使用 '{...}' 进行初始化”

我也试过

wchar_t VALUE[350] = myMap.find(key)->second;

而且我得到了相同的构建错误此外,我将其添加VALUE到另一个wchar_t使用wcscat_s中,这就是为什么我对变量类型没有太多余地。

我很确定我的地图设置正确,那么如何从键中获取值?

标签: c++winapi

解决方案


map 中的值类型是const wchar_t*,所以可以赋值给同类型的变量。从c++11开始,我们可以使用auto来推断类型。或者std::wstring,如果您想复制字符串,请使用。

所有这些作业

  const wchar_t* val = myMap[L"key1"];
  auto* val2 = myMap[L"key1"];
  LPCWSTR val3 = myMap[L"key1"];
  std::wstring str_val = myMap[L"key1"];

要将字符串复制到数组中,您需要调用wcsncpy. 可能是这样的:

  wchar_t VALUE[350];
  if (auto itr = myMap.find(L"key1"); itr != myMap.end()){
      wcsncpy(VALUE, itr->second, sizeof(VALUE)/ sizeof(VALUE[0]));
  }

容易出错且难以维护(字符串的大小可能大于硬编码的350,则只复制字符串的前面部分),最好使用std::wstring

在线演示


推荐阅读