Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 请帮助使用MFC CMap(或std::map)_C++_Mfc_Map - Fatal编程技术网

C++ 请帮助使用MFC CMap(或std::map)

C++ 请帮助使用MFC CMap(或std::map),c++,mfc,map,C++,Mfc,Map,aC++noob在这里。我正在尝试调整一些代码,使用以下键行(这意味着它们不是唯一的代码,但它们是唯一对这个问题有意义的代码)。顺便说一下,我在Windows上使用Visual Studio 2010 C++编译器。 CMap<ATL::CAtlString,LPCTSTR,UINT,UINT> mapForDuplicates; // "dict" definition ATL::CAtlString strDescription = ... // let's just say i

a
C++
noob在这里。我正在尝试调整一些代码,使用以下行(这意味着它们不是唯一的代码,但它们是唯一对这个问题有意义的代码)。顺便说一下,我在Windows上使用Visual Studio 2010 C++编译器。
CMap<ATL::CAtlString,LPCTSTR,UINT,UINT> mapForDuplicates; // "dict" definition
ATL::CAtlString strDescription = ... // let's just say it gets set to a value.
UINT nFound = 0; // What is this for???
BOOL bFound = mapForDuplicates.Lookup(strDescription, nFound);
mapForDuplicates[strDescription] = 1;

注意:我可以在这里使用
std::map
(尽管我也没有使用它);唯一不可协商的是
ATL::CAtlString
——我必须使用这种类型。如果您有问题,请告诉我。

从类的文档开始=-这里也有一个示例参考


IIRC模板的四个参数都在那里,因此您可以输入一个类型,然后返回另一个(const)类型。在这里,它抛出CAtlStrings,但它将返回LPCTSTR。通常,您只需将相同的类型指定两次(例如,int、int、float、对于int->float的映射为float)

Grr,那个额外的L现在真的让我讨厌,它对于16位窗口来说是很棒的,但是现在。。。PCSTR就是我们所需要的。”L'是Windows编程的无用附录


nFound是从映射出来的东西,映射到UINT,所以nFound是UINT。

顺便说一下,下面的伪示例为我实现了这个技巧

std::set<CAtlString> setOfDescriptions;
for each(...)
{
    CAtlString strDescription = GetDescription();
    if (setOfDescriptions.find(strDescription) != setOfDescriptions.end())
    {
        // Remove a duplicate.
    }

    setOfDescriptions.insert(strDescription); // Mark as seen.
}
std::一组描述;
对于每个(…)
{
CAtlString streddescription=GetDescription();
if(setOfDescriptions.find(strDescription)!=setOfDescriptions.end()
{
//删除副本。
}
setOfDescriptions.insert(strDescription);//标记为所示。
}

谢谢,我读了这篇文章,虽然有些帮助,但帮助不大。我仍然不明白为什么需要四个参数,为什么和什么时候类型可以不同,以及一个明确的用法示例。非常感谢。谢谢,这很有帮助。当类型不同时,是否使用简单的强制转换?此外,LPCSTR的
thingy。。。由于我没有对键进行迭代,我应该能够将其更改为
ATL::CAtlString
,对吗?ATL从AtlString返回PCTSTR很快。CMap不允许您编辑密钥,因此它希望向您传回一些常量。您可以尝试将第二个参数设置为常量字符串,但PCTSTR也可以。
std::set<CAtlString> setOfDescriptions;
for each(...)
{
    CAtlString strDescription = GetDescription();
    if (setOfDescriptions.find(strDescription) != setOfDescriptions.end())
    {
        // Remove a duplicate.
    }

    setOfDescriptions.insert(strDescription); // Mark as seen.
}