map std 浮点数索引_C std :: map如何通过索引位置访问键

你可以使用Boost.MultiIndex的ranked indices:

Live On Coliru

#include

#include

#include

using namespace boost::multi_index;

template

using ranked_map=multi_index_container<

std::pair,

indexed_by<

ranked_unique,K,&std::pair::first>>

>

>;

#include

#include

int main()

{

ranked_map<:string> m;

m.emplace("a","value for a");

m.emplace("b","value for b");

assert(m.nth(0)->first=="a");

assert(m.nth(1)->first=="b");

assert(m.nth(1)->second=="value for b");

assert(m.find("a")->second=="value for a");

}

但请注意, nth 不是O(1)而是对数,因此排名索引不是完全随机访问 .

Postscript: 具有真正随机访问的另一种选择是Boost.Container的flat associative containers:

Live On Coliru

#include

#include

#include

int main()

{

boost::container::flat_map<:string> m;

m["a"]="value for a";

m["b"]="value for b";

assert(m.nth(0)->first=="a");

assert(m.nth(1)->first=="b");

assert(m.nth(1)->second=="value for b");

assert(m["a"]=="value for a");

}

这里的缺点是插入需要线性而不是对数时间 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值