【发布时间】:2018-03-28 08:05:06
【问题描述】:
我有一个类似的问题here,但这个新问题的背景不同。
背景
我有这个变量:PublisherMap m_mapPublishers;
PublisherMap的定义是:
using PublisherMap = std::map<CString, S_DEMO_ENTRY_EX>;
代码
我有这个方法可以读取地图并填充CListBox:
bool CChristianLifeMinistryPersonalCopiesDlg::InitPublishersGrid()
{
try
{
m_lbPublishers.ResetContent();
for (auto & mapPublisher : m_mapPublishers)
{
bool bInclude = false;
if (m_iDisplayMode == DISPLAY_EVERYONE)
bInclude = true;
else if (m_iDisplayMode == DISPLAY_BROTHER && mapPublisher.second.eGender == GENDER_MALE)
bInclude = true;
else if (m_iDisplayMode == DISPLAY_SISTER && mapPublisher.second.eGender == GENDER_FEMALE)
bInclude = true;
if (bInclude && m_bLimitDisplay)
{
CString strTemp;
if (!m_mapSSAssignedPublishers.Lookup(mapPublisher.first, strTemp))
bInclude = FALSE;
}
if (bInclude)
{
int i = m_lbPublishers.AddString(mapPublisher.first);
m_lbPublishers.SetItemData(i, MAKEWPARAM(mapPublisher.second.eGender, mapPublisher.second.eAppointed));
}
}
}
catch (_com_error e)
{
LPCTSTR szError = e.ErrorMessage();
AfxMessageBox(szError);
return false;
}
catch (CException* e)
{
e->Delete();
AfxMessageBox(_T("CException"));
return false;
}
m_iSelectMode = SELECT_NONE;
UpdateData(FALSE);
return true;
}
注意我使用了商品数据:
m_lbPublishers.SetItemData(i,
MAKEWPARAM(mapPublisher.second.eGender, mapPublisher.second.eAppointed));
它工作得很好。如果我使用CPtrArray,我会为列表框中的每个条目分配实际的结构对象指针。
问题
我不太了解std::map 的机制。是否有任何安全的方法可以将地图 (mapPublisher) 中的每个条目与每个列表框条目直接关联,以便我以后可以访问它?
我意识到我可以获取列表框条目的文本,然后在地图中找到它并以这种方式获取它。但如果有更直接的方式将两者联系起来呢?
【问题讨论】: