Setting all possible combinations of values
Based on how you store objects at indices determined by the init values, and not stored in sequential order, I'm going to guess that you have a function somewhere that takes an object's index and returns the matching values of a,b,c,d,e.

Let's say it's std::tuple&lt;int,int,int,int.int&gt; get_values(int obj_index);

You could leverage that same function to clean up the generating loop:

for(int i=0; i &lt; 10*10*10*10*10; ++i) {
  auto values = get_values(i);
  objectList[i].val1 = ((std::get&lt;0&gt;(values) - 5) * magnitude) + bestVal1;
  objectList[i].val2 = ((std::get&lt;1&gt;(values) - 5) * magnitude) + bestVal2;
  objectList[i].val3 = ((std::get&lt;2&gt;(values) - 5) * magnitude) + bestVal3;
  objectList[i].val4 = ((std::get&lt;3&gt;(values) - 5) * magnitude) + bestVal4;
  objectList[i].val5 = ((std::get&lt;4&gt;(values) - 5) * magnitude) + bestVal5;
}


If you don't have such a function, then indexing the objects in the way you do makes no sense, and you should just be storing them in order of generation.

Apart from that, my other recommendations would be too dependant on the context. 

For instance, I would look for a way to not have to store the entire table of objects, and implement the evaluation algorithm in a way that at most a few objects have to be in existence at the same time.

I would also consider that brute-forcing an optimization problem like this is generally a last resort, so I would probably look for tackling this with something like a gradient descent if possible.