我交换这个向量的顺序的方式是错误的吗?
Posted
技术标签:
【中文标题】我交换这个向量的顺序的方式是错误的吗?【英文标题】:Is the way I am swapping the ordering of this vector wrong? 【发布时间】:2021-12-31 09:28:44 【问题描述】:我发现自己迷路了,从互联网上寻求指导!
我有一个结构如下:
struct Company
string name;
string language;
int pay;
int age;
我已将这个结构存储在具有“vector >Company>”的“class CompanyManager”中。
class CompanyManager
vector<Company> companyVector;
现在我遇到的问题是我想在向量中随机化 Company 结构的顺序。
这是我在谷歌的帮助下的尝试。
int size = this->companyVector.size();
for (int i = 0; i < size - 1; i++)
int j = i + rand() % (size - i);
swap(this->companyVector[i], this->companyVector[j]);
我认为我在这里做错了,但我不确定到底是什么。这是否会交换我的结构的内容,因为这似乎是在我的程序中发生的事情。
为了清楚起见,我正在尝试交换公司向量的顺序。
提前致谢!
【问题讨论】:
为什么不使用标准算法std::shuffle()
来洗牌?
我不确定你的问题是什么。 “交换向量元素的内容”和“交换向量(元素)的顺序”有什么区别......?
我不知道我的编译器是旧的还是新的,但我似乎无法访问 std::shuffle()。我收到警告/错误:“没有函数模板实例“std::shuffle”与参数列表 C/C++(304) 匹配”。这就是为什么我采用更手动的方法。 std::random_shuffle 在我的 C++ 版本中也不存在。
回答标题中的问题,如果你没有使用标准库算法,那你就做错了。 在 stl 中已经有一种算法可以完全满足您的需求,std::random_shuffle
:
std::random_shuffle(this->companyVector.begin(), this->companyVector.end());
见https://en.cppreference.com/w/cpp/algorithm/random_shuffle
编辑:如果您使用的是 C++17,则应使用 std::shuffle
,因为 std::random_shuffle
在 14 中已被弃用(请参阅 cmets)
【讨论】:
std::random_shuffle()
在 C++14 中被弃用,在 C++17 中被移除。现在有std::shuffle()
。
我已经相应地修改了帖子:)以上是关于我交换这个向量的顺序的方式是错误的吗?的主要内容,如果未能解决你的问题,请参考以下文章