Efficient storage and calling of varying objects
It's hard to know where to start with this, but here are some things that may help you improve your code.

When seeking a review, provide full code

The posted code is just a fragment with a lot of pieces missing.  For instance, all of the taste_box_x functions are missing and it's not really very obvious what they might be.  To get a better review, post a better question.

Pass complex types reference rather than by value

For complex types such as std::vector, it's usually better to pass by reference rather than by value to avoid forcing each function call to make copies.  If the passed object should not be modified by the routine, pass a const reference.

Use classes

Since this is C++, it would make sense to use classes.  For example, one could imagine that there is a base class box from which each of the box types might be derived.  User taste preference could be an std::unordered_set in which each fruit type is the key and the value would be that user's taste weighting value.  Fruits might be an enum class, etc.

Don't abuse using namespace std

Putting using namespace std at the top of every program is a bad habit that you'd do well to avoid.