我想用隨機整數填充矢量,但不能有重複。用固定的數字池中的隨機唯一整數填充矢量
首先,我有這樣的代碼把numberOfSlots 0和7之間隨機整數的向量(numberOfSlots可以是2〜20):
srand((unsigned int)time(NULL));
unsigned int min = 0;
unsigned int max = 7;
std::vector<unsigned int> v;
for (int i = 0; i < numberOfSlots; i++) {
unsigned int rdm = std::rand() % (max - min + 1) + min;
v.push_back(rdm);
}
這是當重複的代碼整數是允許的。這工作正常!
現在我想改變的代碼,以便從可能相同的整數隨機池(分鐘到最大),如果它不是已經在載體中只添加所產生的隨機整數。
因此,如果例如numberOfSlots是5,則該載體將具有從池中隨機選擇的5個條目,但不是相同的,例如, 7,1,3,5,0。如果numberOfSlots是8,則該載體將是例如3,1,2,7,6,0,4,5。
我知道如何洗牌載體和東西,但我無法得到這個工作。我想我必須使用一個while循環,並檢查vector中所有已存在的整數,並對照新的隨機數添加數字,如果它已經在那裏生成一個新的隨機數並再次檢查等,但我不知道
我是初學者,這真的很難。有人可以給我一個提示嗎?我將不勝感激...非常感謝你
如果你真的知道如何隨機洗牌一個載體,這應該是微不足道的。正確的隨機播放(http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)不涉及檢查元素是否已經存在。 – jamesdlin
對不起,我的意思是這樣洗牌std :: random_shuffle(v.begin(),v.end()),但它並沒有真正幫助我的問題...我應該在我的帖子中省略^^ –
可能的重複[算法來選擇一個單一的,隨機組合的值?](http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –