复合索引的C ++容器,允许在查找时忽略子索引

时间:2012-02-22 12:52:06

标签: c++ stl indexing set

复合索引的适当容器是什么允许在查找时忽略子索引?它不应该使用比没有此功能的容器更多的资源。

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的多集/地图作为唯一容器的密钥不是解决方案。

1 个答案:

答案 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的性能。