相关疑难解决方法(0)

带有提示的std :: unordered_map插入

std::map有一个insert方法,它采用一个"提示"迭代器,如果提示正确,将把log(n)的插入时间减少到恒定时间.很明显这是如何工作的,因为容器可以确保新添加的项具有小于提示的键并且具有比提示之前的项更大的键.否则提示错误并执行正常插入.

std::unordered_map也有类似insert的提示功能.提示有什么作用?我不清楚如何使用另一个"提示"迭代器来加速哈希映射插入.

如果使用它,什么是适当的"提示".在std::map,通常通过调用lower_bound地图找到提示.

c++ stl c++11

32
推荐指数
2
解决办法
3456
查看次数

find()vs lower_bound + key_comp

我在stackOverflow std :: map insert或std :: map find中遇到了以下问题

为什么使用find()被认为低于lower_bound()+ key_comp()?

假设我有以下地图

map<int, int> myMap;
myMap[1]=1; 
myMap[2]=3;
myMap[3]=5;
int key = xxx; //some value of interest.
int value = yyy; 
Run Code Online (Sandbox Code Playgroud)

建议的答案是使用

map<int, int>::iterator itr = myMap.lower_bound(key);
if (itr != myMap.end() && !(myMap.key_comp()(key, itr->first)))
{
    //key found. 
    // do processing for itr->second
    // 
}else {
    //insert into the end position 
    myMap.insert (itr, map<int, int>::value_type(key, value));
}
Run Code Online (Sandbox Code Playgroud)

为什么它比以下更好?

map<int, int>::iterator itr = myMap.find(key);
if (itr != myMap.end())
{
    //key found. 
    // …
Run Code Online (Sandbox Code Playgroud)

c++

8
推荐指数
1
解决办法
2849
查看次数

获取或设置 Javascript ES6 映射中的元素?

是否可以在 Javascript Map中一步查找或添加元素?

我想一步完成以下操作(以避免两次寻找密钥的正确位置):

// get the value if the key exists, set a default value otherwise
let aValue = aMap.get(aKey)
if(aValue == null) {
    aMap.set(aKey, aDefaultValue)
}
Run Code Online (Sandbox Code Playgroud)

相反,我只想搜索一次密钥。

在 C++ 中,可以使用std::map::insert()std::map::lower_bound()

在 JavaScript 中,代码可能如下所示:

let iterator = aMap.getPosition(aKey)
let aValue = aMap.getValue(iterator)
if(aValue == null)
{
    aMap.setWithHint(aKey, aValue, iterator)
}
Run Code Online (Sandbox Code Playgroud)

或者

let aValue = aMap.getOrSet(aKey, aDefaultValue) 
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,但我想确保我是正确的。我也有兴趣知道为什么这是不可能的,尽管它是一个重要的功能。

javascript dictionary find addition

5
推荐指数
1
解决办法
4711
查看次数

标签 统计

c++ ×2

addition ×1

c++11 ×1

dictionary ×1

find ×1

javascript ×1

stl ×1