static bool erasekey(multiset<DPair>& set, const DPair& key ) { multiset<DPair>::iterator iter; //cout << "try to erase pair (" << key.a << ", " << key.b << ")" << endl; pair<multiset<DPair>::iterator, multiset<DPair>::iterator> ret; ret = set.equal_range(key); for (iter=ret.first; iter!=ret.second && !(*iter == key); ++iter); if (iter!=ret.second) // so the dpair is found { //cout << "erasing pair (" << iter->a << ", " << iter->b << ")" << endl; set.erase(iter); return true; } //cout << " dpair not found!" << endl; return false; }