Stop pushing on the vector

For better performance
This commit is contained in:
Segcolt 2024-10-12 21:24:16 -03:00
parent 65aed86783
commit 7aad87810f

35
sa.hpp
View File

@ -58,25 +58,28 @@ class solution {
its.insert(i);
}
this->items.resize(items.size());
size_t i = 0;
long long cap = capacity;
while (!its.empty()) {
auto itr = its.upper_bound(cap);
if (itr == its.begin()) {
cap = capacity;
cap -= *its.begin();
this->items.push_back(*its.begin());
its.erase(its.begin());
continue;
}
itr--;
cap -= *itr;
this->items.push_back(*itr);
its.erase(itr);
}
while (!its.empty()) {
auto itr = its.upper_bound(cap);
if (itr == its.begin()) {
cap = capacity;
cap -= *its.begin();
itr = its.begin();
} else {
itr--;
cap -= *itr;
}
this->items[i] = *itr;
its.erase(itr);
i++;
}
fitness = calculate_boxes();
}
fitness = calculate_boxes();
}
void setneighbor() { // Gera um vizinho da solução
std::uniform_int_distribution<> dist(0, items.size() - 1);