0

我希望std::map insert()函数的行为取决于要插入的对是否已经在地图中 - 如果不是,照常插入它,如果它已经存在,则增加存储在second对的 a 中的计数器。我如何在不额外查询存在的情况下做到这一点(因为无论如何插入都会查询它)?

我正在跟踪很多事件记录,每个记录都包含sourcereceiverID。事件存储为std::vector. 我还试图维护字典sourcesreceivers记录,std::map因为first该对(键)的位置包含 ID,而second包含一些source信息以及std::vector跟踪所有引用该 ID 的事件source

因此,当事件引用当前不存在时source,插入应该正常进行,但如果引用source已经在字典中,则插入应该将引用事件编号添加到std::vector现有字典元素。

4

1 回答 1

1

看起来必须保留insert函数的结果,对其进行分析并做出相应的行为:

typedef std::map<int, T> itmap;
typedef std::pair<itmap::iterator, bool> itinsresult;
//...
itmap m;
int i;
T t;
//...
itinsresult result = m.insert(std::make_pair(i, t));
if (result.second) // new element inserted
{
   //...
}
else // element already exists
{
   (*result.first).do_something();
   // ...
}
于 2013-06-27T06:14:22.297 回答