vector由顺序变为乱序输出问题

kivien 2014-05-08 09:08:00
注意:

是由序的vector变为序。


vetor<CString> vcstr;//本容器已经初始化,内容为足够大的字典序CString集合

//要求:
//把vcstr中的顺序打乱。


...全文
689 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kivien 2014-05-08
  • 打赏
  • 举报
回复
好了,结贴了
zybjtu 2014-05-08
  • 打赏
  • 举报
回复
随机数生成两个下标,a,b 交换vcstr[a]和vcstr[b] 重复n多次上述操作
ForestDB 2014-05-08
  • 打赏
  • 举报
回复
标准库有shuffle算法 做C++先得熟悉这些基本库
kivien 2014-05-08
  • 打赏
  • 举报
回复
引用 5 楼 buyong 的回复:
http://www.cplusplus.com/reference/algorithm/random_shuffle/
好吧,库函数比较厉害
kivien 2014-05-08
  • 打赏
  • 举报
回复

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--;
}
kivien 2014-05-08
  • 打赏
  • 举报
回复
原来有人写出来了,果然太慢了 不知道写得对不对,我贴我的看看

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--;
}
奉壹 2014-05-08
  • 打赏
  • 举报
回复
引用 5 楼 buyong 的回复:
http://www.cplusplus.com/reference/algorithm/random_shuffle/
大神果然比较高端
奉壹 2014-05-08
  • 打赏
  • 举报
回复
引用 2 楼 u012565501 的回复:
[quote=引用 1 楼 Indestiny 的回复:] 塞到集合里面再从集合输出可以不
主要是你怎么“塞“ 居然不会这个拼音[/quote] 很尴尬的发现塞进set再输出还是有序,唉,我的数据结构学的真是太可怕了 hash_set倒是稍微乱一下,但还是不行,唉,惭愧惭愧
kivien 2014-05-08
  • 打赏
  • 举报
回复

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

sort(vcstr.begin(),vcstr.end(),cmp);//经检验,会越界
ithiker 2014-05-08
  • 打赏
  • 举报
回复
默认是按照CString的比较函数排序的;实现乱序需要你重写一下比较函数就可以了,话说乱应该也有乱的规则
kivien 2014-05-08
  • 打赏
  • 举报
回复
引用 1 楼 Indestiny 的回复:
塞到集合里面再从集合输出可以不
主要是你怎么“塞“ 居然不会这个拼音
奉壹 2014-05-08
  • 打赏
  • 举报
回复
塞到集合里面再从集合输出可以不

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧