Случайный рандом с коэффициентом шанса, как сделать?
И это вприницпи работает. Как мне сделать так, что бы у каждого предмета можно было выставлять определённый коофицент выпадения? Или хотя бы подскажите куда копать, в каком направлении.
Смотри:
В урну поместили 2 шара: черный и белый, какова вероятность того, что первый наугад вынутый шар окажется белым?

Дальше

В урну поместили три шара: белый, черный и красный, какова вероятность того, что первый наугад вынутый шар окажется белым?

Дальше
В урну поместили четыре шара: 2 белых, черный и красный, какова вероятность того, что первый наугад вынутый шар окажется белым?

Учитывай что полная вероятность равна 1.0

Вот так это работает, а все остальное вздор... .

Другими словами тебе нужно N штук каждого элемента пропорционально твоему коэфиценту выпадения. Потом https://en.cppreference.com/w/cpp/algorithm/random...

А дальше рандомно дёргать из контейнера, оставлять их там или удалять зависит от задачи. 

Использовать распределения или нет аналогично. https://en.cppreference.com/w/cpp/numeric/random

Более сложные варианты я описывать не возьмусь.
Можно типа такого
double getRand(){//возвращает рандом от 0 до 1
    return (double)rand()/(double)RAND_MAX;
}

string ChanceItemDrop(){
        string itemsRandom[] = {
            "a", "b", "c", "d", "e"
        };
        
        float itemsChance[] = {
            .30f, .80f, .50f, .30f, .40f //шансы от 0 до 1,  1 -100% , 0 - 0%
        };
        int arrLen = sizeof(itemsChance)/sizeof(*itemsChance);
        double r;
        int arrSize;
        do{
            r = getRand();
            arrSize = 0;
            for(int i=0;i < arrLen;i++)
                arrSize += r <= itemsChance[i]?1:0;
        }while(arrSize == 0);
        int* inxs= new int[arrSize];
        for(int i=0,p = 0;i < arrLen;i++)
            if(r <= itemsChance[i])
                inxs[p++] = i;
        string result = itemsRandom[inxs[(int)floor(getRand()*arrSize)]];
        free(inxs);
        return result;
    }