将对象分配到 unordered_map 数组中?

Posted

技术标签:

【中文标题】将对象分配到 unordered_map 数组中?【英文标题】:Assign object into unordered_map array? 【发布时间】:2013-06-17 05:44:10 【问题描述】:
typedef tr1::unordered_map <string, pin *> pin_cmp;
pin_cmp _pin_cmp;
_Pins[_num_pins] = new pin (pin_id, _num_pins, s, n, d);
_pin_cmp[_Pins[_num_pins]->get_name ()] = _Pins[_num_pins]; //performance profiling

你能教我这段代码到底在做什么吗?

_pin_cmp[_Pins[_num_pins]->get_name ()] = _Pins[_num_pins]; //performance profiling

我不熟悉仍然可以与 array[] 一起使用的 unordered_map。我很困惑 unordered_map 只需要 key 和 value 为什么会有 array[]?

【问题讨论】:

我不明白你的问题。在最后一行中,您只需使用Key = _Pins[_num_pins]-&gt;get_name ()Value = _Pins[_num_pins]; 创建(或更改)元素。能否请您稍微澄清一下这个问题? @soon 你好,其实我完全不明白最后一行在做什么。_Pins[_num_pins] 是一个类对象。 _Pins[_num_pins]->get_name = 返回指向 _name 的指针,即“htclk” 【参考方案1】:

在上面的示例中,我希望 _Pins 是一个顺序容器。

_pin_cmp[_Pins[_num_pins]-&gt;get_name ()] = _Pins[_num_pins]; //performance profiling

这行代码两次访问一个元素_Pins[_num_pins]

    在右侧获取对象 在左侧获取对象的名称。

然后将对象放在_pin_cmp(无序映射)中,使用对象的名称作为索引。 此操作的确切行为描述为here。

【讨论】:

嗨。谢谢你的回复。假设 _Pins[_num_pins] 是指向对象的指针,而 _Pins[_num_pins]->get_name () 是获取 _name 并返回指向 _name 的指针。那么现在我的钥匙是什么,我的价值是什么? _name 将是我的密钥,而 _Pins[_num_pins] 将是值? 名称字符串将是您的键,指向您的对象的指针将是值。 让我确保我清楚。所以有 char* get_name() return _name//_name = htclk 。所以现在 _Pins[_num_pins]->get_name () 将拥有指向 _name 的指针,而 _Pins[_num_pins] 是指向对象的指针。那么是 _pin_cmp[htclk] = 指向对象的指针还是 _pin_cmp[pointer to htclk] = 指向对象的指针?希望你明白我想说什么。 :) 因为您使用的是 std::string(可以在 tr1::unordered_map &lt;string, pin *&gt; 中看到)指向 _name 的指针将被转换为映射中的 std::string 对象。您可以通过调用 _pin_cmp["htclk"] 来访问该对象,这将搜索等于 "htclk" 的 std::string 并返回该位置的值。 哇。现在完全明白了。非常感谢:)

以上是关于将对象分配到 unordered_map 数组中?的主要内容,如果未能解决你的问题,请参考以下文章

预分配 unordered_map 的线程安全

将 unordered_map 与动态分配的用户定义类一起使用

Next JS / mongoose:在保存新对象之前将 ObjectId 分配到数组中

将数组从一行复制到一个数组对象中-“_numbersArray 永远不会分配给,并且始终具有其默认值 null”[关闭]

如何将多个对象分配给一个数组? [关闭]

std::unordered_map::reserve 是不是保证只要映射中的元素较少就不会发生内存分配?