2013-06-25 19 views
0

我想要std::map insert()功能不同的行为取决于对插入是否已经在地图上或不 - 如果不是,将其插入像往常一样,如果它已经存在,增加存储在second里的柜台的一对。我怎么能做到这一点,没有额外的查询存在(因为无论如何插入查询)?如何实现不同'的std ::地图插入()`取决于对存在的行为被插入?

我在跟踪大量的事件记录,其中每个记录都包含sourcereceiver ID。事件存储为std::vector。我也想保持sourcesreceivers记录的字典作为std::map其中对(密钥)的first包含了ID,而second包含一些source信息加std::vector跟踪所有引用该source的事件。

所以,当该事件是指目前不在source,插入应正常进行,但如果称为source已经在字典中,插入应的参照事件号码添加到现有的字典元件的std::vector

回答

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(); 
    // ... 
} 
+1

' - >'添加到语言尤其是避免迂回'(* result.first).do_something ()' – Slava