我希望std::map insert()
函数的行为不同,具体取决于要插入的对是否已经在地图中 - 如果不是,请照常插入,如果它已经存在,则增加计数器存储在该对的second
内。如果没有额外查询存在,我怎么能这样做(因为插入无论如何都要查询它)?
我正在跟踪很多事件记录,每个事件记录都包含source
和receiver
ID。事件存储为std::vector
。我还试图将sources
和receivers
记录的字典维护为std::map
,其中first
对(密钥)包含ID,而{{1} }}包含一些second
信息加source
,用于跟踪引用该std::vector
的所有事件。
因此,当事件引用当前不存在的source
时,插入应该正常进行,但如果引用的source
已经在字典中,则插入应该将引用事件编号添加到{ {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();
// ...
}