我想在log(n)时间内使用C std::map
来访问与给定键相关联的值 . 由于 std::map
的键是排序的,从技术上讲,我可以按排序顺序中的位置访问键 . 我知道std :: map没有随机访问迭代器 . 是否有任何"map like"数据结构提供通过密钥的访问(通过使用[]运算符),并通过排序顺序中的密钥位置提供(只读)随机访问 . 这是一个基本的例子:
my_fancy_map['a'] = 'value_for_a'
my_fancy_map['b'] = 'value_for_b'
assert my_fancy_map.get_key_at_location(0) == 'a'
assert my_fancy_map.get_key_at_location(1) == 'b'
assert my_fancy_map.get_value_at_location(1) == 'value_for_b'
assert my_fancy_map['a'] == 'value_for_a'
2 回答
你可以使用Boost.MultiIndex的ranked indices:
Live On Coliru
但请注意,
nth
不是O(1)而是对数,因此排名索引不是完全随机访问 .Postscript: 具有真正随机访问的另一种选择是Boost.Container的flat associative containers:
Live On Coliru
这里的缺点是插入需要线性而不是对数时间 .
你可以迭代它们: