diff --git a/node/Network.cpp b/node/Network.cpp index deb05d1cc..ab875889c 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -498,12 +498,11 @@ bool Network::_isAllowed(const Address &peer) const std::vector Network::_allMulticastGroups() const { // Assumes _lock is locked - std::vector mgs(_myMulticastGroups); - std::vector::iterator oldend(mgs.end()); - for(std::map< MulticastGroup,uint64_t >::const_iterator i(_multicastGroupsBehindMe.begin());i!=_multicastGroupsBehindMe.end();++i) { - if (!std::binary_search(mgs.begin(),oldend,i->first)) - mgs.push_back(i->first); - } + std::vector mgs; + mgs.reserve(_myMulticastGroups.size() + _multicastGroupsBehindMe.size() + 1); + mgs.insert(mgs.end(),_myMulticastGroups.begin(),_myMulticastGroups.end()); + for(std::map< MulticastGroup,uint64_t >::const_iterator i(_multicastGroupsBehindMe.begin());i!=_multicastGroupsBehindMe.end();++i) + mgs.push_back(i->first); if ((_config)&&(_config->enableBroadcast())) mgs.push_back(Network::BROADCAST); std::sort(mgs.begin(),mgs.end());