vector由順序變為亂序輸出問題


注意:

是由 序的vector變為 序。


vetor<CString>  vcstr;//本容器已經初始化,內容為足夠大的字典序CString集合

//要求:
//把vcstr中的順序打亂。


13 个解决方案

#1


塞到集合里面再從集合輸出可以不

#2


引用 1 樓 Indestiny 的回復:
塞到集合里面再從集合輸出可以不

主要是你怎么 “塞“

居然不會這個拼音

#3


默認是按照CString的比較函數排序的;實現亂序需要你重寫一下比較函數就可以了,話說亂應該也有亂的規則

#4



bool cmp(){
l=rand();
r=rand();
return l<r;
}

sort(vcstr.begin(),vcstr.end(),cmp);//經檢驗,會越界

#5


http://www.cplusplus.com/reference/algorithm/random_shuffle/

#6


引用 2 樓 u012565501 的回復:
Quote: 引用 1 樓 Indestiny 的回復:

塞到集合里面再從集合輸出可以不

主要是你怎么 “塞“

居然不會這個拼音

很尷尬的發現塞進set再輸出還是有序,唉,我的數據結構學的真是太可怕了
hash_set倒是稍微亂一下,但還是不行,唉,慚愧慚愧

#7


引用 5 樓 buyong 的回復:
http://www.cplusplus.com/reference/algorithm/random_shuffle/

大神果然比較高端

#8


原來有人寫出來了,果然太慢了

不知道寫得對不對,我貼我的看看

vetor<bool> vbool;
vetor<CString>::iterator vcit;
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++)
vbool.push_back(false);
vetor<bool>::iterator vbit;
len=vcstr.size();
CString pick;
CString put;
while(len>0){
rNum=ran()%len;//產生0到len-1的隨機數
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++){
if(0==rNum){
vbit=true;
pick=*vcstr;
if(""!=put)
*vcstr=put;
put=pick;
break;
}
}
len--;
}

#9



vetor<bool> vbool;
vetor<CString>::iterator vcit;
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++)
vbool.push_back(false);
vetor<bool>::iterator vbit;
len=vcstr.size();
CString pick;
CString put;
while(len>0){
rNum=ran()%len;//產生0到len-1的隨機數
vbit=vbool.begin();
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++){
if(0==rNum){
vbit=true;
pick=*vcstr;
if(""!=put)
*vcstr=put;
put=pick;
break;
}
if(*vbit)
continue;
else
rNum--;
}
len--;
}




引用 8 樓 u012565501 的回復:
原來有人寫出來了,果然太慢了

不知道寫得對不對,我貼我的看看

vetor<bool> vbool;
vetor<CString>::iterator vcit;
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++)
vbool.push_back(false);
vetor<bool>::iterator vbit;
len=vcstr.size();
CString pick;
CString put;
while(len>0){
rNum=ran()%len;//產生0到len-1的隨機數
for(vcit=vcstr.begin();vcit!=vcstr.end();vcit++){
if(0==rNum){
vbit=true;
pick=*vcstr;
if(""!=put)
*vcstr=put;
put=pick;
break;
}
}
len--;
}

#10


引用 5 樓 buyong 的回復:
http://www.cplusplus.com/reference/algorithm/random_shuffle/


好吧,庫函數比較厲害

#11


標准庫有shuffle算法

做C++先得熟悉這些基本庫

#12


隨機數生成兩個下標,a,b
交換vcstr[a]和vcstr[b]
重復n多次上述操作

#13


好了,結貼了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com