我交换这个向量的顺序的方式是错误的吗?

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++ 版本中也不存在。 回答标题中的问题,如果你没有使用标准库算法,那你就做错了。 【参考方案1】:

在 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() 我已经相应地修改了帖子:)

以上是关于我交换这个向量的顺序的方式是错误的吗?的主要内容,如果未能解决你的问题,请参考以下文章

排序算法

路由交换技术——OSPF

基础篇:冒泡排序,快速排序

matlab中如何交换矩阵的行或者列

向量元素在分区算法中不交换。

如何在两个 AVX2 向量之间交换 128 位部分