gpt4 book ai didi

c++ - 获取刚插入容器的对象的迭代器或引用

转载 作者:行者123 更新时间:2023-12-01 14:50:47 28 4
gpt4 key购买 nike

当我 insert()将对象放入容器中 std::unordered_map ,如何在不搜索它的情况下获取指向其位置的引用/迭代器/指针(例如 find() ;那将意味着不必要的开销)。

我的意思是,容器数据结构应该知道它刚刚存储我的对象的位置,而无需搜索。

考虑这段代码:

class Node{
public:
int id;
double mass;
};

std::unordered_map<uint32_t,Node> nodes;

Node& tryInsertNode( uint32_t key, const Node& node ){
auto nod_it = nodes.find( key );
if ( nod_it == nodes.end() ){
nodes.insert( {key, node} );
nod_it = nodes.find( key ); // this is silly, I don't want to do this !!!
// nod_it = ??? // JUST GIVE ME MY POINTER !!!
}else{
nod_it->second = node;
};
return nod_it->second;
}

我需要返回对 class Node 实例的引用/指针/迭代器在 std::unordered_map<uint32_t,Node> nodes; 内部分配这样我以后就可以修改这个节点的竞争,而无需支付 find() 的费用

当然,当我使用指针时我不会有这个问题,即: std::unordered_map<uint32_t,Node*> nodes;

但我认为在我的特定情况下会是 std::unordered_map<uint32_t,Node>出于性能原因(即减少内存跳跃)更可取。

最佳答案

std::unordered_map::insert返回新插入元素的迭代器*。

所以你已经拥有它了。只是,目前在您的代码中,您正在将其丢弃。


* 好吧,或者是包裹它的一对。这取决于您调用哪个 insert。在你的情况下:

nod_it = nodes.insert( {key, node} ).first;

关于c++ - 获取刚插入容器的对象的迭代器或引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36813786/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com