gpt4 book ai didi

c++ - 在创建显示索引如何在另一个数组中移动的数组时遇到问题

转载 作者:行者123 更新时间:2023-11-30 05:21:04 25 4
gpt4 key购买 nike

这是我要实现的功能的要点。但是,每当我打印出 order_of_change 数组时,它的值总是完全偏离肿瘤值移动到的位置。我将 if 语句中的 i 更改为 tumor[i] 以确保 tumor[i] 确实匹配其在 temp_array 中的相应值并且确实如此。谁能告诉我出了什么问题?

double temp_array[20];
for (int i = 0; i < 20; i++)
{
temp_array[i] = tumor[i];
}

//sort tumor in ascending order
sort(tumor, tumor + 20); //tumor is an array of 20 random numbers

int x = 0; //counter
int order_of_change[20]; //array to house the index change done by sort
while (x < 20) //find where each value was moved to and record it in order_of_change
{
for (int i = 0; i < 20; i++)
{
if (temp_array[x] == tumor[i])
{
order_of_change[x] = i;
x += 1;
}
}
}

最佳答案

要对数据进行排序,但仅让索引显示排序顺序,您需要做的就是按升序创建一个索引数组(从 0 开始),然后将其用作 std 的一部分::sort 标准。

这是一个例子:

#include <algorithm>
#include <iostream>
#include <array>

void test()
{
std::array<double, 8> tumor = {{4, 3, 7, 128,18, 45, 1, 90}};
std::array<int, 8> indices = {0,1,2,3,4,5,6,7};

//sort tumor in ascending order
std::sort(indices.begin(), indices.end(), [&](int n1, int n2)
{ return tumor[n1] < tumor[n2]; });

// output the tumor array using the indices that were sorted
for (size_t i = 0; i < tumor.size(); ++i)
std::cout << tumor[indices[i]] << "\n";

// show the indices
std::cout << "\n\nHere are the indices:\n";
for (size_t i = 0; i < tumor.size(); ++i)
std::cout << indices[i] << "\n";
}

int main()
{ test(); }

Live Example

尽管示例使用了std::array,但原理是一样的。根据数据中的项目对索引数组进行排序。 tumor 数组保持完整,实际元素并未移动。

如果数组(或 std::vector)中的项在四处移动时复制成本很高,但仍希望能够生成一个排序列表而不实际排序项目。

关于c++ - 在创建显示索引如何在另一个数组中移动的数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com