我有文件夹信息
struct folder
{
int id;
int folder_count;
long long size;
};
我需要使文件夹(可以是1000个或更多)分别按照它们的folder_count和大小排序(具有最多folder_count
的文件夹必须排在首位,如果有相同的folder_count
,则必须是按大小排序)。
我已经通过自定义比较器实现了
struct folder_comparator
{
bool operator() (const folder& a, const folder& b) const
{
return a.folder_count>b.folder_count || (a.folder_count==b.folder_count && a.size>=b.size);
}
};
并将文件夹放进去
set <folder, folder_comparator> folders;
但是与此同时,文件夹中有许多更新。我可以通过map
来实现此目的,密钥是文件夹的id
。
map<int, folder> folders;
但是在这种情况下,我无法保持自定义顺序(如上所述)。
我都需要。 (保持自定义顺序和O(1)
或至少O(log(N))
复杂性搜索)
在这种情况下,什么数据结构或集合和映射的混合可以帮助我?
答案 0 :(得分:2)
我都需要。 (保留自定义顺序和O(1)或至少O(log(N))复杂度搜索)
这意味着Boost Multi-Index最有可能完全适合您的需要,因为ID上的哈希索引和使用(固定)比较器的非唯一排序索引都可以。虽然它具有学习曲线,但似乎会增加您的工作量(而不是维护2个独立的容器)
您当前的比较器的PS不满足严格弱订购的要求,这是所有已排序标准容器和增强容器的一部分。无论哪种情况,都需要修复。提供适当比较器的最简单方法是使用std::tie
:
bool operator() (const folder& a, const folder& b) const
{
return std::tie( a.folder_count, a.size ) > std::tie( b.folder_count, b.size );
}