复合索引的适当容器是什么允许在查找时忽略子索引?它不应该使用比没有此功能的容器更多的资源。
F.e。给出索引
struct index_t
{
index_t(unsigned key_, unsigned subkey_)
: key(key_)
, subkey(subkey_)
{}
unsigned key;
unsigned subkey;
};
并插入
index_t(1,11)
index_t(2,21)
index_t(2,22)
index_t(2,23)
index_t(3,31)
所有元素与f.e. <{1}}并忽略key == 2
必须被查找。
同样可以使用给定的subkey
和 key
进行查找。因此,使用带有subkey
的多集/地图作为唯一容器的密钥不是解决方案。
答案 0 :(得分:0)
你可以做到
std::set<index_t> mySet;
要搜索具有给定键和任何子键的所有项目,请执行
std::pair<std::set<index_t>::iterator, std::set<index_t>::iterator> range;
range.first = mySet.lower_bound(index_t(key, 0));
range.second = mySet.upper_bound(index_t(key, UINT_MAX));
这将保留2 * log n的性能。