用“ std :: multimap”的排序内容填充列表控件?

矩形等于

作为此问题的后续,我需要一种通过索引访问我的数据的方法。但是数据需要按时间戳排序,包含文件路径作为值,并在发现新元素时实时显示。

考虑到多个文件/文件夹可能包含相同的时间戳,我决定将其std::multimap作为存储数据的首选容器。但是,这使填充列表控件的过程变得复杂,因为它LVITEM::iItem是一个索引值,用于确定要在带有LVS_OWNERDATA标志集的控件(即虚拟列表)中显示哪个数据元素

我似乎无法找到一种方法来通过索引访问我的数据以获取时间戳记键和文件路径值,那么我该怎么做才能解决此问题?

雷米·勒博(Remy Lebeau)

您不能直接访问std::multimap按索引的内容但是您可以做的是将排序后的数据存储在中std::multimap,然后将iterator存储在一个单独的文件中,std::vector并将其用作ListView的数据源。当ListView按索引要求数据时,转到std::vector并使用iterator指定索引处的来访问中的数据std::multimap当您insert()在中添加新项目时std::multimap(),它会iterator为该项目返回,并且现有iterator不会因插入而无效。

std::multimap<MyItemData> mydata;
std::vector<std::multimap<MyItemData>::iterator> lvdata;

...

std::multimap<MyItemData>::iterator iter = mydata.insert(...);
lvdata.push_back(iter);
SendMessage(hwndLV, LVM_SETITEMCOUNT, lvdata.size(), LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL);

...

case LVN_GETDISPINFO:
{
    NMLVDISPINFO *pdi = reinterpret_cast<NMLVDISPINFO*>(lParam);
    std::multimap<MyItemData>::iterator iter = lvdata[pdi->item.iItem];
    // use *iter as needed...
    break;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章