小弟我想实现从一个集合里随机取出一个数值,然后把他删掉
我想实现从一个集合里随机取出一个数值,然后把他删掉
//我想实现从一个集合里随机取出一个数值,然后把他删掉
set<int> mySet;
int i = 0;
for (i=0; i<MAX; i++)
{
mySet.insert(i);
}
int nCount = 0;
int nRand = 0;
for (i=0; i<MAX; i++)
{
nCount = mySet.size();
nRand = rand()%nCount;
//问题卡住,由于底层是map的,所以不能实现很快查找到第N个元素的迭代器
//只能一个一个的迭代器遍历查找
//如果用list的话查找元素慢,删除元素快
//如果用vector的话删除时移动元素慢
}
------解决方案--------------------
用vector可以啊。自己用一个变量标识目前实际使用的数据个数。假设是msize
比如删除1个元素,不用真的删除,把这个元素和(msize-1)为下标的元素交换,同时msize--
增加的时候先判断msize是否超过vector的size,不超过就把数据添加在msize下标处,msize++
如超过vector,就push,然后msize++
当然,数据是无序的,有序的不能这么做。
//我想实现从一个集合里随机取出一个数值,然后把他删掉
set<int> mySet;
int i = 0;
for (i=0; i<MAX; i++)
{
mySet.insert(i);
}
int nCount = 0;
int nRand = 0;
for (i=0; i<MAX; i++)
{
nCount = mySet.size();
nRand = rand()%nCount;
//问题卡住,由于底层是map的,所以不能实现很快查找到第N个元素的迭代器
//只能一个一个的迭代器遍历查找
//如果用list的话查找元素慢,删除元素快
//如果用vector的话删除时移动元素慢
}
------解决方案--------------------
用vector可以啊。自己用一个变量标识目前实际使用的数据个数。假设是msize
比如删除1个元素,不用真的删除,把这个元素和(msize-1)为下标的元素交换,同时msize--
增加的时候先判断msize是否超过vector的size,不超过就把数据添加在msize下标处,msize++
如超过vector,就push,然后msize++
当然,数据是无序的,有序的不能这么做。