コンテナにオブジェクトがあると、参照/イテレータ/ポインタを検索せずに(例: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;
}
私はコストを支払うことなく、後でこのノードの競合変更できるようにstd::unordered_map<uint32_t,Node> nodes;
内部に割り当てられclass Node
のインスタンスへの参照/ポインタ/イテレータを返すために必要 std::unordered_map<uint32_t,Node*> nodes;
をしかし、私は中にいることを考える:find()
私は、ポインタを使用する場合、私はこの問題を持っていないだろう、確かには、IEパフォーマンス上の理由から、私の特別なケースはstd::unordered_map<uint32_t,Node>
となるでしょう。メモリ内のジャンプが少なくなります)。
はい、あなたが正しい、私は:: 'のstdのリファレンスを読んunordered_map ::挿入()'慎重に、と私は、インサートは、ノード 'へのポインタ/参照/イテレータを返す必要があることを期待しませんでした'、Pair>、bool>' ...ではなく、エラーメッセージで混乱しました。 –