You can make a struct for the values:
then make an unordered map or map or vector or something:
Then you can do as you wish.
UNORDERED_MAP<uint32, playerData> playerDatas; // GUIDLow, playerData
 operator should create a new playerData if one doesnt exist since we are not using a pointer.
This means that if a player guid(low) is not in the map or w/e, it will still return an object and both test and start will be 0 unless set to something.
This means that you dont need to check if a player has a record in the map.
playerDatas[player->GetGUIDLow()].start; // if printed should be 0
playerDatas[player->GetGUIDLow()].start = 123; // changed to 123
Btw. Structs are like classes. They can have constructors and so on.
But there is something different with the default values.