如果透明比较的地图中不存在密钥,如何插入密钥?

问题描述 投票:0回答:1

我有一个

std::map<K, T, std::less<>>
和一个
KK
类型的“密钥”,它与
K
订单兼容。如果键存在,我想返回相应的值。如果该键不存在,我想具体化一个真实的键(类型为
K
),并将默认构造的
T
的键值对插入到映射中。

(我的问题针对的是C++14,但是借用C++17,你可以想到

K = std::string
KK = std::string_view
,还有
T = int
)。

似乎有两个次优解决方案: 这个:

auto it = insert(std::pair<KK, T>{ key, T{} }).first

不是最优的,因为即使不需要,它也需要具体化

T
值。

或者:

auto it = map.find(key);
if (it == map.end()) it = insert(std::pair<KK, T>{ K(key), T{} }).first;

由于双重查找而不是最优的。

c++ dictionary c++14
1个回答
0
投票

透明映射不仅允许键被具体化,而且传递给

insert
的第二个(值)组件也不必完全是映射的
mapped_type
。您可以传递任何可转换为
mapped_type
的类型。这样,您就可以传递一个廉价的代理对象来按需创建值。

© www.soinside.com 2019 - 2024. All rights reserved.