gpt4 book ai didi

c++ - 用 `std::multimap` 的排序内容填充列表控件?

转载 作者:行者123 更新时间:2023-11-30 05:42:10 25 4
gpt4 key购买 nike

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

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

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

最佳答案

您不能通过索引直接访问 std::multimap 的内容。但是您可以做的是将排序后的数据存储在 std::multimap 中,然后将 iterator 值存储在单独的 std::vector 中,然后将其用作 ListView 的数据源。当 ListView 按索引请求数据时,转到您的 std::vector 并使用指定索引处的 iterator 访问 std::中的数据 multimap 。当您在 std::multimap()insert() 一个新项目时,它会为该项目返回一个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;
}

关于c++ - 用 `std::multimap` 的排序内容填充列表控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com