From 5c8b9e392b2e13104a0b04dc1f83e09ab54a9bb0 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Tue, 31 May 2016 10:40:44 +0200 Subject: [PATCH] IP-Query: Use a vector instead a set and random pick an IP --- db.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/db.cpp b/db.cpp index 3c19bed..346c3c0 100644 --- a/db.cpp +++ b/db.cpp @@ -180,10 +180,10 @@ void CAddrDb::GetIPs_(set& ips, uint64_t requestedFlags, int max, cons } return; } - std::set goodIdFiltered; + std::vector goodIdFiltered; for (std::set::const_iterator it = goodId.begin(); it != goodId.end(); it++) { if ((idToInfo[*it].services & requestedFlags) == requestedFlags) - goodIdFiltered.insert(*it); + goodIdFiltered.push_back(*it); } if (!goodIdFiltered.size()) @@ -193,14 +193,10 @@ void CAddrDb::GetIPs_(set& ips, uint64_t requestedFlags, int max, cons max = goodIdFiltered.size() / 2; if (max < 1) max = 1; - int low = *goodIdFiltered.begin(); - int high = *goodIdFiltered.rbegin(); + set ids; while (ids.size() < max) { - int range = high-low+1; - int pos = low + (rand() % range); - int id = *(goodIdFiltered.lower_bound(pos)); - ids.insert(id); + ids.insert(goodIdFiltered[rand() % goodIdFiltered.size()]); } for (set::const_iterator it = ids.begin(); it != ids.end(); it++) { CService &ip = idToInfo[*it].ip;