我需要一个解决方案,它将存储一个非唯一的键 - 值对。我不想重复键(空间效率),我想专注于查找速度(插入新数据的效率不太重要)。我将在这里使用std :: multimap。但我必须查找符合某些范围标准的密钥。
最复杂的例子: 键是一个字符串,值不重要。 我想找出所有的值,哪些键以“Lol”开头。 或者我想找出所有值,哪些键“介于”“bar”和“foo”之间。
我可以使用multimap吗?我的第二个想法是使用有序向量,它将指向值的向量。这样的事情:
std::vector<std::string, std::vector<T>> sorted_vec;
然后我可以轻松满足搜索条件。但我真的很关心查找的性能。这是一种正确的方法吗?
答案 0 :(得分:2)
是的,您可以使用std :: multimap。 要完成范围基础查询,可以在头文件算法中使用两个算法std :: lower_bound和std :: upper_bound。
答案 1 :(得分:1)
或者我想找出所有值,哪些键“介于”“bar”和“foo”之间。
如果您有Boost,我建议使用boost::flat_map(它只是标题库) - 它维护sorted vector inside。通常,由于更好的紧凑性/局部性,它比 std :: map 具有更好的查找效果。
否则使用
vector<pair<string,value>>
or
vector<pair<string,vector<value>>> //(for re-use of keys)
// instead of pair, you may use just struct if you concerned with lexicographical compare
加上标准:: equal_range / lower_bound
答案 2 :(得分:0)