如何实现不同的`std :: map insert()`行为取决于插入对的存在?

时间:2013-06-25 08:41:48

标签: c++ std stdmap insertion

我希望std::map insert()函数的行为不同,具体取决于要插入的对是否已经在地图中 - 如果不是,请照常插入,如果它已经存在,则增加计数器存储在该对的second内。如果没有额外查询存在,我怎么能这样做(因为插入无论如何都要查询它)?

我正在跟踪很多事件记录,每个事件记录都包含sourcereceiver ID。事件存储为std::vector。我还试图将sourcesreceivers记录的字典维护为std::map,其中first对(密钥)包含ID,而{{1} }}包含一些second信息加source,用于跟踪引用该std::vector的所有事件。

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

1 个答案:

答案 0 :(得分: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();
   // ...
}