[英]Multiple Elements in one index of vector
我正在查看 geeks for geeks 的桶排序问题,其中他们将多个元素存储在同一向量索引处。
我的问题是我们如何将多个元素存储在向量中的同一索引处。
代码在这里
**void bucketSort(float arr[], int n)
{
// 1) Create n empty buckets
vector<float> b[n];
// 2) Put array elements
// in different buckets
for (int i = 0; i < n; i++) {
int bi = n * arr[i]; // Index in bucket
b[bi].push_back(arr[i]);
}
// 3) Sort individual buckets
for (int i = 0; i < n; i++)
sort(b[i].begin(), b[i].end());
// 4) Concatenate all buckets into arr[]
int index = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < b[i].size(); j++)
arr[index++] = b[i][j];
}**
vector<float> b[n]
=> 这是一个二维向量。 因此,当您编写b[bi].push_back()
时,这意味着您要在bi
th 向量处插入一个元素,或者您可以说bi
th 行。
在桶排序中,可以有多个桶。 所以这个二维向量代表了所有这些桶。 也就是说, b[i]
代表第i
个桶。
因此,您的问题的答案是,它们不会在向量中的同一索引处存储多个元素。 他们将元素arr[i]
插入到bucket[n*array[i]]
中,它本身就是一个向量。
为了立即回答您的问题,他们不会将多个元素存储在向量的单个索引中。 这是正在发生的事情:
vector<float>
告诉编译器向量的每个元素严格来说都是一个浮点值。 但是,后面的b[n]
部分是用于声明数组的符号。
最终,你最终得到vector<float> b[n]
,它基本上是一个数组,但数组的每个元素都是一个 vector 。 向量本身仅存储您指示编译器的浮点值。
b[bi].push_back(arr[i])
被翻译成:
对于存储在名为 b 的数组的 biᵗʰ 索引中的向量,append 的浮点值是arr[i]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.